dfs求连通性,bfs求迷宫最短路
2017-05-19 22:10
260 查看
/* 4 6 ...WWW .W.... ...... WWWWWW 4 8 ........ ........ ........ ........ 2 3 WWW WWW 6 5 ..... ....W ..... ...W. W.... ....W */ #include <iostream> #include <cstdio> #define LOCAL using namespace std; const int MAXN=105; int M,N; char A[MAXN][MAXN]; void dfs(int x,int y) { A[x][y]='.'; for(int dx=-1;dx<=1;++dx) { for(int dy=-1;dy<=1;++dy) { int nx=x+dx,ny=y+dy; if(nx>=0&&nx<M&&ny>=0&&ny<N&&A[nx][ny]=='W') //判断合法性 dfs(nx,ny); //状态的转移 } } } int main() { #ifdef LOCAL freopen("data.in","r",stdin); freopen("data.out","w",stdout); #endif while(cin>>M>>N) { for(int i=0;i<M;++i) scanf("%s",A[i]); int res=0; for(int i=0;i<M;++i) for(int j=0;j<N;++j) if(A[i][j]=='W') {dfs(i,j);++res;} cout<<res<<endl; } return 0; }
/*
6 5
1 1 0 1 1
1 0 1 1 1
1 0 1 0 0
1 0 1 1 1
1 1 1 0 1
1 1 1 1 1
*/
#include <iostream>
#include <cstdio>
#include <queue>
#define INF 0X37373737
#define LOCAL
using namespace std;
typedef pair<int,int> P;
queue<P> que;
const int MAXN=105,FF=10; //这样FF也是const int类型
int maze[MAXN][MAXN]; //1表示空地,0表示障碍物
int M,N,d[MAXN][MAXN];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
void bfs(int x,int y) //x,y代表起点坐标
{
d[x][y]=0;
que.push(make_pair(x,y));
while(!que.empty())
{
pair<int,int> p=que.front();que.pop();
for(int i=0;i<4;++i)
{
int nx=p.first+dx[i],ny=p.second+dy[i];
if(nx>=0&&nx<M&&ny>=0&&ny<N&&d[nx][ny]==INF&&maze[nx][ny]==1) //判断合法性
{que.push(make_pair(nx,ny));d[nx][ny]=d[p.first][p.second]+1;}
}
}
}
int main()
{
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
while(cin>>M>>N)
{
for(int i=0;i<M;++i)
for(int j=0;j<N;++j)
{cin>>maze[i][j];d[i][j]=INF;}
bfs(0,0);
for(int i=0;i<M;++i)
{
for(int j=0;j<N;++j)
cout<<d[i][j]<<' ';
cout<<endl;
}
}
return 0;
}
相关文章推荐
- 迷宫问题、最短路(BFS,DFS)
- POJ - 3984 迷宫问题(BFS、DFS)
- POJ - 3984 迷宫问题 (BFS+DFS)
- FZU 1205 小鼠迷宫问题 <BFS+DFS>
- poj 迷宫问题(路径记录)(DFS,BFS)
- 迷宫2--矩阵中任意两点最短路(8个方向) dfs 效率很低
- 搜索专题(DFS&&BFS&&剪枝)HDU 1728-逃离迷宫
- poj 迷宫问题(路径记录)(DFS,BFS)
- ACM: 方向dfs + bfs求最短路 poj 3…
- FZU 1205(小鼠迷宫问题)BFS+DFS的基本综合运用(同一题目中体现两种搜索方法的特点)
- 图的遍历(dfs、bfs、最短路、最小生成树、拓扑排序)
- OpenJ_Bailian 4127 迷宫问题(DFS+BFS)
- hdu 1728 逃离迷宫 (论DFS思想在BFS中的应用)
- hdu1428漫步校园( 最短路+BFS(优先队列)+记忆化搜索(DFS))
- 迷宫最短路(bfs)
- codevs 1215 迷宫 广搜bfs 深搜dfs
- 【搜索】BFS、DFS的综合练习(小鼠迷宫)
- BFS 、DFS 解决迷宫入门问题
- HDU 1728逃离迷宫(DFS或者BFS)
- POJ3984 迷宫问题(深搜DFS+广搜BFS)搜索记录坐标,坑