说说:
这道题的题意,事先题目给你如下图所示:
XXXXXXXXX
X X X
X * X
X X X
XXXXXXXXX
X X
X X
X X
XXXXX
可以把以上图像想象成一间房子,字符‘X‘是围墙,你现在所处的位置是‘*‘所在的地方,要求你将’*‘周围的空白,包括‘*‘本身全部用‘#代替。注意不能穿越围墙。其实就是最最基础的深度遍历的问题,只要找到‘*‘所在的位置,然后查看周围是否为空格,是则填上‘#‘,然后递归,否则函数直接返回即可。
源代码:
#include <stdio.h>
#include <string.h>
#define MAXW 80+5
#define MAXH 30+5
char room[MAXH][MAXW];
void dfs(int,int);
int main(){
int T,n,x,y,i;
freopen("data","r",stdin);
// scanf("%d",&T);
getchar();
while(T--){
n=0;
while(gets(room[n]))
if(room[n][0]=='_')
break;
else
n++;
for(x=0;x<n;x++)//找到初始位置
for(y=0;y<strlen(room[x]);y++)
if(room[x][y]=='*')
dfs(x,y);
for(x=0;x<=n;x++)
printf("%s\n",room[x]);
}
return 0;
}
void dfs(int x,int y){
if(room[x][y]==' '||room[x][y]=='*')
room[x][y]='#';
else
return;
//对当前点的四周进行遍历
dfs(x-1,y-1);dfs(x,y-1);dfs(x+1,y-1);
dfs(x-1,y); dfs(x+1,y);
dfs(x-1,y+1);dfs(x,y+1);dfs(x+1,y+1);
return ;
}Maze Exploration UVA 784 (简单的深度优先搜索)
原文地址:http://blog.csdn.net/u011915301/article/details/39269867