hdu 1175 bfs 转弯题
来源:互联网 发布:美军网络司令部 编辑:程序博客网 时间:2024/04/30 09:46
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175
和之前的1728类似。就是判断转弯数,建立一个用于记录转弯数的数组。。
还有就是对于特殊情况要进行考虑,比如起点与终点相同的情况,对于本题来说是不可以消去的应该输出NO。还有就是起点或终点是零这也是不行的,因为0代表没有棋子。。。
还有在判断能不能走的时候要小心,对于判断条件一定要小心,不要图赶快写。。
错误的地方都写在注释中了。。
代码:
// hdu 1175 bfs 转弯数//1、起点和终点重合的时候要特殊考虑,这是不能消掉的。。 //2、如果起点或终点之中有一个0,就不能消掉。//3、 对于turn1数组每次查询之前都要进行初始化。。 #include<cstdio>#include<queue>#include<cstring>#define INF 100000000;using namespace std;int n,m;int sx,sy,ex,ey;int ok;int d1[4] = {0,0,1,-1};int d2[4] = {1,-1,0,0};int map[1010][1010];int turn1[1010][1010];struct state{int x,y;int turn;int dir;}cur,next1;void bfs(state temp){temp.turn = 0;temp.dir = -1;turn1[temp.x][temp.y] = 0;queue<state> q;q.push(temp);while(!q.empty()){cur = q.front();q.pop();if(cur.x == ex&&cur.y == ey){if(cur.turn <= 2){ok = 1;printf("YES\n");return;}}if(cur.turn > 2) continue;for(int i = 0;i < 4;i++){next1.x = cur.x + d1[i];next1.y = cur.y + d2[i];next1.dir = i;if(next1.x>0&&next1.x<=n&&next1.y>0&&next1.y<=m&&(map[next1.x][next1.y]==0||(next1.x==ex&&next1.y==ey))){ //这里要小心 一开始写成(map[next1.x][next1.y]==0||(map[next1.x][next1.y]==map[sx][sy]))if(cur.dir!=i && cur.dir!=-1) //如果两个棋子是被相同数字的棋子挡住就会出现错误的判断 next1.turn = cur.turn+1;elsenext1.turn = cur.turn;if(next1.turn <= turn1[next1.x][next1.y]){turn1[next1.x][next1.y] =next1.turn;q.push(next1);}}}}}int main (){while(scanf("%d%d",&n,&m)==2 && (n||m)){for(int i = 1;i <= n;i++)for(int j = 1;j <= m;j++){scanf("%d",&map[i][j]);turn1[i][j] = INF;}int t;scanf("%d",&t);while(t--){scanf("%d%d%d%d",&sx,&sy,&ex,&ey);for(int i = 1;i <= n;i++)for(int j = 1;j <= m;j++)turn1[i][j] = INF;//此处要记得初始化。。不然WA妥妥的,因为在之前的查询之中已经被破坏 ok = 0;if(map[sx][sy]==map[ex][ey]&&map[sx][sy]*map[ex][ey]!=0&&(sx!=ex||sy!=ey)){cur.x = sx;cur.y = sy;bfs(cur);if(!ok) printf("NO\n");}elseprintf("NO\n");}}return 0; }
0 0
- hdu 1175 bfs 转弯题
- hdu 1175 连连看 bfs+转弯
- HDU-1175-连连看BFS+转弯
- HDU 1728 逃离迷宫(BFS+转弯次数+转弯方向)
- hdu 1728 bfs 变形最小转弯数
- HDU 1728--【BFS && 记录转弯次数】
- BFS hdu 1728 逃离迷宫 转弯数
- HDU 1728 逃离迷宫 BFS(加转弯数)
- HDU 1728 逃离迷宫 bfs 限制k次转弯
- bfs转弯问题
- hdu 1175 连连看dfs(记录转弯次数)
- HDOJ-1728 逃离迷宫(BFS + 转弯)
- BFS(广搜) 最小转弯问题
- 转弯
- 转弯
- HDU 1175(搜索题,BFS)
- hdu 1175 bfs
- hdu 1175 BFS
- ios-touch无效的解决办法
- Single Number
- Oracle表空间扩展
- 黑马程序员——JAVA学习笔记——类集——(List,Set)
- 链接、装载与库:Linux下的ELF文件
- hdu 1175 bfs 转弯题
- nginx+keepalived主辅切换
- CountDownLatch入门教程1
- 只是一点小感慨
- dfgd
- java点点(二)
- 高级表单
- php手机号正则替换中间四位
- 2015年第三周项目五:数组做数据成员(1)