您的位置:首页 > 其它

深搜(DFS),Image Perimeters

2016-03-17 22:20 302 查看
题目链接:http://poj.org/problem?id=1111

解题报告:

1、这里深搜有一点要注意,对角线上的点,如果为'.',则total不应该增加,因为这不是他的边长。

#include <stdio.h>
#include <string.h>

char maps[35][35];
int flag[35][35];
int mov1[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};
int mov2[4][2]= {{1,1},{1,-1},{-1,1},{-1,-1}};
int r,c;
int click_x,click_y;
int total;///周长

void dfs(int x,int y)
{
if(flag[x][y]!=0) return ;
else
{
flag[x][y]=1;
int tx;
int ty;
for(int k=0; k<4; k++)
{
tx=x+mov1[k][0];
ty=y+mov1[k][1];

if(maps[tx][ty]=='X'&&flag[tx][ty]==0)
dfs(tx,ty);
else if(maps[tx][ty]=='.')
total++;

}
for(int k=0; k<4; k++)
{
tx=x+mov2[k][0];
ty=y+mov2[k][1];
if(maps[tx][ty]=='X'&&flag[tx][ty]==0)
dfs(tx,ty);
}
}
}

int main()
{
while(scanf("%d%d%d%d",&r,&c,&click_x,&click_y),r)
{
total=0;
memset(flag,0,sizeof(flag));
memset(maps,'.',sizeof(maps));
for(int i=1; i<=r; i++)
{
scanf("%s",maps[i]+1);
maps[i][c+1]='.';
}
dfs(click_x,click_y);
printf("%d\n",total);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: