说说:
这道题的题意,事先题目给你如下图所示:
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