nyoj 58 最小步数
2014-11-19 20:26
197 查看
难度:4
描述
这有一个迷宫,有0~8行和0~8列:
1,1,1,1,1,1,1,1,1
1,0,0,1,0,0,1,0,1
1,0,0,1,1,0,0,0,1
1,0,1,0,1,1,0,1,1
1,0,0,0,0,1,0,0,1
1,1,0,1,0,1,0,0,1
1,1,0,1,0,1,0,0,1
1,1,0,1,0,0,0,0,1
1,1,1,1,1,1,1,1,1
0表示道路,1表示墙。
现在输入一个道路的坐标作为起点,再如输入一个道路的坐标作为终点,问最少走几步才能从起点到达终点?
(注:一步是指从一坐标点走到其上下左右相邻坐标点,如:从(3,1)到(4,1)。)
输入第一行输入一个整数n(0<n<=100),表示有n组测试数据;
随后n行,每行有四个整数a,b,c,d(0<=a,b,c,d<=8)分别表示起点的行、列,终点的行、列。输出输出最少走几步。样例输入
样例输出
描述
这有一个迷宫,有0~8行和0~8列:
1,1,1,1,1,1,1,1,1
1,0,0,1,0,0,1,0,1
1,0,0,1,1,0,0,0,1
1,0,1,0,1,1,0,1,1
1,0,0,0,0,1,0,0,1
1,1,0,1,0,1,0,0,1
1,1,0,1,0,1,0,0,1
1,1,0,1,0,0,0,0,1
1,1,1,1,1,1,1,1,1
0表示道路,1表示墙。
现在输入一个道路的坐标作为起点,再如输入一个道路的坐标作为终点,问最少走几步才能从起点到达终点?
(注:一步是指从一坐标点走到其上下左右相邻坐标点,如:从(3,1)到(4,1)。)
输入第一行输入一个整数n(0<n<=100),表示有n组测试数据;
随后n行,每行有四个整数a,b,c,d(0<=a,b,c,d<=8)分别表示起点的行、列,终点的行、列。输出输出最少走几步。样例输入
2 3 1 5 7 3 1 6 7
样例输出
12 11
#include<stdio.h> #include<queue>//队列头文件 using namespace std; int d[4][2]={-1,0,0,1,1,0,0,-1}; //搜索方向 struct point { int x,y,step; }; int bfs(point s,point t,int map[9][9]) { queue<point> que;//建立队列 int i; point p; //临时中间变量 que.push(s); //真心不知道注释出为什么是不对的,就是不能AC // while(1) // { // if(s.x==t.x&&s.y==t.y) //找到位置 // return s.step; // for(i=0;i<4;++i) // { // p.x=s.x+d[i][0]; // p.y=s.y+d[i][1]; //// if(p.x<0||p.x>8||p.y<0||p.y>8) //超出临界 //// continue; //继续走 // if(map[p.x][p.y]==0) //此路可走 // { // map[p.x][p.y]==1; //走过标记 // p.step=s.step+1;//增加步数 // que.push(p) ;//位置入队 // } // // } // s=que.front();//继续搜索 // que.pop();// 并且出队 // } while(1) { if(s.x==t.x&&s.y==t.y) return s.step; for(i=0;i<4;++i) { p.x=s.x+d[i][0]; p.y=s.y+d[i][1]; if(map[p.x][p.y]==0) { p.step=s.step+1; map[p.x][p.y]=1; que.push(p); } } s=que.front(); que.pop(); } } int main() { int T; point start ,end;//定义结构体开始位置及末位置 scanf("%d",&T); while(T--) { int map[9][9]={ 1,1,1,1,1,1,1,1,1, 1,0,0,1,0,0,1,0,1, 1,0,0,1,1,0,0,0,1, 1,0,1,0,1,1,0,1,1, 1,0,0,0,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,0,0,0,1, 1,1,1,1,1,1,1,1,1, }; scanf("%d%d%d%d",&start.x,&start.y,&end.x,&end.y); map[start.x][start.y]=1; start.step=0; printf("%d\n",bfs(start,end,map)); } return 0; }
相关文章推荐
- nyoj 58 最小步数 dfs与bfs均可
- NYOJ-58-最小步数(搜索)
- NYOJ 58 最小步数(BFS)
- nyoj-58-最小步数
- nyoj58最小步数——BFS
- 搜索学习(2)--NYOJ 58 最小步数
- NYOJ 58 最小步数
- nyoj 58 最小步数问题 BFS
- nyoj 58 最小步数(回溯算法应用)
- NYOJ 题目58最小步数
- NYOJ ~ 58 ~ 最小步数(BFS)
- NYOJ 58 最小步数(BFS && DFS)
- nyoj 58 最小步数(入门bfs)
- nyoj——58 最小步数(DFS,BFS 迷宫问题)
- NYOJ ~ 58 ~ 最小步数(DFS)
- NYOJ-58 最小步数
- nyoj 58 最小步数(bfs)
- NYOJ ~ 58 ~ 最小步数(BFS)
- NYOJ 58 最小步数
- 【深度搜索】NYOJ58最小步数