【BFS广度优先搜索】SDUTOJ 2779---找朋友
2014-07-29 09:16
134 查看
找朋友
Time Limit:1000MS Memory
Limit:65536KB 64bit IO Format:%lld & %llu
Description
X,作为户外运动的忠实爱好者,总是不想呆在家里。现在,他想把死宅Y从家里拉出来。问从X的家到Y的家的最短时间是多少。
Input
多组输入。每组测试数据首先输入两个整数n,m(1<= n ,m<=15 )表示地图大小。接下来的n 行,每行n个字符。保证输入数据合法。
Output
若X可以到达Y的家,输出最少时间,否则输出 -1。
Sample Input
Sample Output
Time Limit:1000MS Memory
Limit:65536KB 64bit IO Format:%lld & %llu
Description
X,作为户外运动的忠实爱好者,总是不想呆在家里。现在,他想把死宅Y从家里拉出来。问从X的家到Y的家的最短时间是多少。
Input
多组输入。每组测试数据首先输入两个整数n,m(1<= n ,m<=15 )表示地图大小。接下来的n 行,每行n个字符。保证输入数据合法。
Output
若X可以到达Y的家,输出最少时间,否则输出 -1。
Sample Input
3 3 X#Y *** #*# 3 3 X#Y *#* #*#
Sample Output
4 -1
#include<stdio.h> #include<string.h> struct node { int x,y,c; }q[300]; int tx[]={0,1,0,-1}; int ty[]={1,0,-1,0}; int v[16][16]; char map[16][16]; void bfs(int x,int y,int m,int n) { int i,e=1,s=0; struct node t,f; t.x=x; t.y=y; t.c=0;//初始化总时间为0 q[0]=t; while(s<e) { t=q[s++]; if(map[t.x][t.y]=='Y') { printf("%d\n",t.c); return ; }//找到后输出总时间 for(i=0;i<4;i++)//上下左右四个方向寻找 { f.x=t.x+tx[i];//以X点为原点左右移动后的横坐标 f.y=t.y+ty[i];//以Y点为原点上下移动后的纵坐标 if(f.x>=0&&f.x<n&&f.y>=0&&f.y<m&&v[f.x][f.y]==0&&map[f.x][f.y]!='#')//避免走出地图或者碰到障碍物 { f.c=t.c+1;//记录走一步后的总时间 q[e++]=f;//记录移动后的状态 v[f.x][f.y]=1;//标记该点防止回溯 } } } printf("-1\n");//没有找到就输出-1 } int main() { int i,j,m,n; while(~scanf("%d%d",&n,&m)) { getchar(); for(i=0;i<n;i++) scanf("%s",map[i]); memset(v,0,sizeof(v)); for(i=0;i<n;i++) { for(j=0;j<m;j++) if(map[i][j]=='X') break; if(j!=m)break; }//找到X的所在位置 v[i][j]=1;//标记该为1 bfs(i,j,m,n); } return 0; }
相关文章推荐
- SDUTOJ 2779 找朋友(BFS&&DFS)
- 【2779】找朋友 sdutoj
- 【2779】找朋友 sdutoj
- bzoj4243 交朋友 bfs
- 深度优先搜索(DFS),广度优先搜索(BFS)
- 训练第二周之BFS算法(广度优先搜索)
- 广度优先搜索(BFS)——迷宫的最短路径
- 算法之------深度优先搜索DFS和广度优先搜索BFS(最短路径)
- 图的深度优先搜索(DFS)、广度优先搜索(BFS)
- 二叉树 深度优先搜索(DFS)、广度优先搜索(BFS)
- 广度优先搜索(bfs)初识
- 广度优先搜索(BFS) C++实现
- 找朋友(bfs)
- 总结自己应用广度优先搜索(BFS)中的错误(记POJ 1376 Robot结题过程)
- 找朋友(bfs)
- 【算法——02】图的遍历——BFS广度优先搜索、DFS深度优先搜索
- 广度优先搜索(bfs)的学习
- BFS(广度优先搜索)
- sdutOJ 2142 --图论--用的是链表+BFS ---改了好久,都是小毛病,粗心啊!!!
- 广度优先搜索(BFS)