最少步数BFS
2014-12-20 16:10
645 查看
描述
这有一个迷宫,有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<iostream> #include<cstring> #include<queue> using namespace std; typedef pair<int,int> P; int a[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 }; int b[9][9],T,x1,y1,x2,y2; int c1[] = {-1,1,0,0}; int c2[] = {0,0,-1,1}; queue<P> que; int main(){ cin>>T; while(T--){ for(int i = 0;i < 9;i++) for(int j = 0;j < 9;j++) b[i][j] = 65535; cin>>x1>>y1>>x2>>y2; b[x1][y1] = 0; que.push(P(x1,y1)); while(!que.empty()){ P temp = que.front();que.pop(); //判断是否到达终点 if(temp.first == x2 && temp.second == y2) break; for(int i = 0;i < 4;i++){ int x = temp.first + c1[i],y = temp.second + c2[i]; if(x >= 0 && x < 9 && y >= 0 && y < 9 && a[x][y] == 0 && b[x][y] == 65535){ que.push(P(x,y)); b[x][y] = b[temp.first][temp.second] + 1; } } } while(!que.empty()) que.pop(); cout<<b[x2][y2]<<endl; } return 0; }
相关文章推荐
- 将强制转型减到最少
- 电脑族每天最少应喝4杯茶
- 5个数排列所需的最少比较次数
- 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
- 你认为在学校中你面临着哪些竞争?最少填三项
- 最少硬币问题
- axis2客户端需要使用的最少jar包
- java:递归:汉罗塔游戏计算出最少的步数
- RHEL5中启用最少的服务
- 日期最少代码
- 设计元素最少的网站Quora怎样谈产品设计?
- 使用5,7,12做加减运算,如果用最少步数得到任意数n
- pku3635有一定大小的油箱从S到T所需最少的money
- hdu4003 2011大连赛区网赛1003一棵树,K个机器人遍历所有结点所需的最少权值和
- hdu_1257(最少拦截系统)
- 回溯法之最少重量机器设计问题
- HDU 1257 最少拦截系统
- 81匹马9个赛道,不计时,最少要赛几场可以求出最快四匹马?
- 最少硬币问题
- 写最少的代码