这道题看上去很麻烦,什么迷宫啊,门之类的,其实挺简单的,就是让把与 * 连通的都置为 # 包括 * ,
直接dfs就可以了,不过我wa了好多次。。。最后竟然是多读了一个换行,忘了加getchar()了,gets()函数
会把缓冲区里面的换行给读进去的。。。应该把换行去掉,血的教训啊。。。
代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> int dx[4]={-1,0,0,1}; int dy[4]={0,-1,1,0}; char a[35][85]; void dfs(int x,int y) { for(int i=0; i<4; i++) { int xx = x+dx[i]; int yy = y+dy[i]; if(a[xx][yy]==' ') { a[xx][yy]='#'; dfs(xx,yy); } } return ; } int main() { int T; scanf("%d",&T); getchar(); while(T--) { int i =0; int j; memset(a,'\0',sizeof(a)); while(gets(a[i++])) { if(a[i-1][0]=='_') { i--; break; } } for(int k=0; a[k][0]!='_'; k++) { for(j=0; a[k][j]!='\0'; j++) { if(a[k][j]=='*') { a[k][j]='#'; dfs(k,j); } } } int k; for( k =0; a[k][0]!='_'; k++) puts(a[k]); puts(a[k]); } return 0; }