uva 784 Maze Exploration
搜索水题,其实就是一个图的遍历(因为放在数据结构图专题中)
给你一个图,以一整行的"_________"作为这个图的结束
然后"X"表示不能到达,空格是能到达的,"*"也是可以到达的,并且是一个起点,要求从所有的起点出发,能到达的地方都标记为"#"
然后输出标记后的整个图,"_______"也是要输出的
另外注意这个图不一定是一个矩阵,可能是不规则的,例如
XXXXXXXXX
X X X
X * X
X X X
XXXXXXXXX
X X
X X
X X
XXXXX
_____
当然这些都是没有关系的,就直接遍历好了,已经标记了"#"的点不要再访问
先给出DFS代码
#include <stdio.h> #include <string.h> #define N 35 #define M 85 char g[N][M]; int n; int x[5]={0,-1,1,0,0} , y[5]={0,0,0,-1,1}; void input() { int i; memset(g,0,sizeof(g)); n=1; while(1) { gets(g[n]); if(g[n][0]=='_') return ; n++; } } void dfs(int i , int j) { int k,xx,yy; for(k=1; k<=4; k++) { xx=i+x[k]; yy=j+y[k]; if(xx>=1 && xx<=n && yy>=0 && (g[xx][yy]==' ' || g[xx][yy]=='*') ) { g[xx][yy]='#'; dfs(xx,yy); } } } int main() { int T,i,j; scanf("%d",&T); getchar(); while(T--) { input(); /* printf("^^^^^^^^^^^^^^^^^\n"); for(i=1; i<=n; i++) printf("%s\n",g[i]); */ for(i=1; i<=n; i++) for(j=0; g[i][j]!='\0'; j++) if(g[i][j]=='*') dfs(i,j); // printf("bbbbbbbbbbbbbbbbbbbbbb\n"); for(i=1; i<=n; i++) printf("%s\n",g[i]); // printf("eeeeeeeeeeeeeeeeeeeeee\n"); } return 0; }
这个是BFS代码
#include <stdio.h> #include <string.h> #include <queue> using namespace std; #define N 35 #define M 85 char g[N][M]; int n; int x[5]={0,-1,1,0,0} , y[5]={0,0,0,-1,1}; struct node {int i,j;}; queue<struct node> q; void input() { int i; memset(g,0,sizeof(g)); n=1; while(1) { gets(g[n]); if(g[n][0]=='_') return ; n++; } } void bfs() { int i,j,k,xx,yy; struct node tmp,ttmp; for(i=1; i<=n; i++) for(j=0; g[i][j]!='\0'; j++) if(g[i][j]=='*') { while(!q.empty()) q.pop(); g[i][j]='#'; tmp.i=i; tmp.j=j; q.push(tmp); // while(!q.empty()) { tmp=q.front(); q.pop(); for(k=1; k<=4; k++) { xx=tmp.i+x[k]; yy=tmp.j+y[k]; if(xx>=1 && xx<=n && yy>=0 && (g[xx][yy]==' ' || g[xx][yy]=='*') ) { g[xx][yy]='#'; ttmp.i=xx; ttmp.j=yy; q.push(ttmp); } } } } } int main() { int T,i,j; scanf("%d",&T); getchar(); while(T--) { input(); bfs(); // printf("bbbbbbbbbbbbbbbbbbbbbb\n"); for(i=1; i<=n; i++) printf("%s\n",g[i]); // printf("eeeeeeeeeeeeeeeeeeeeee\n"); } return 0; }