前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

hdu1072

作者头像
@坤的
发布2018-06-04 11:17:03
3800
发布2018-06-04 11:17:03
举报
文章被收录于专栏:*坤的Blog

#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; class Data { public: int Etime; int x, y; int count; }; int n, m, sx, sy; int map[9][9]; int direction[4][2] = {1, 0, -1, 0, 0, 1, 0, -1}; int bfs() //广度搜索 { int i; int tx, ty; queue<Data> Que; while(!Que.empty()) { Que.pop(); } Data Da, temp; Da.x = sx; Da.y = sy; Da.Etime = 6; Da.count = 0; Que.push(Da); //起点入队 while(!Que.empty()) { temp = Que.front(); Que.pop(); if(map[temp.x][temp.y] == 3) //到了终点 return temp.count; if(temp.Etime == 1) //没到终点,时间变成1,下一步之后,时间变0,无论怎么走,都没时间了,直接跳过 continue; //忽略掉时间为0的,下面的引爆就不用判断时间 for(i = 0; i < 4; i++) //四个方向搜索 { tx = temp.x + direction[i][0]; ty = temp.y + direction[i][1]; if(tx < 0 || tx >= n || ty < 0 || ty >= m || map[tx][ty] == 0) continue; Da.x = tx; Da.y = ty; Da.Etime = temp.Etime - 1; Da.count = temp.count + 1; if(map[tx][ty] == 4) //引爆,重置时间 { Da.Etime = 6; map[tx][ty] = 0; } Que.push(Da); } } return -1; } int main() { // freopen("data.txt", "r", stdin); int T, i, j; while(scanf("%d", &T) != EOF) { while(T--) { scanf("%d%d", &n, &m); for(i = 0; i < n; i++) for(j = 0; j < m; j++) { scanf("%d", &map[i][j]); if(map[i][j] == 2) //找到起点 { sx = i; sy = j; } } int ans = bfs(); cout << ans << endl; } } return 0; }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档