北大2225题
来源:互联网 发布:ubuntu add to dash 编辑:程序博客网 时间:2024/05/01 08:09
题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2225
是个广度优先搜索题目,框架与图的广度优先搜索相同,但是实现上有所区别,主要是因为存储结构上的差异,图的邻接矩阵中相邻的点并不一定是逻辑相邻,而这个地图的存储结构中相邻的点就是逻辑上相邻的点。所以图的广度优先搜索用到辅助数组dist来表示距离同时也表示是否被访,而这个图直接可以设置被访到位置值就可以标示是否被访和距离。
#include <iostream>
#include <string>
#include <queue>
using namespace std;
#define MAX 10
struct Pos
{
int s;
int r;
int c;
};
int main()
{
freopen("in.txt","r",stdin);
char tag[MAX],map[MAX][MAX][MAX];
int i,j,k,n,move[6][3];
Pos b,d,c;
queue<Pos> q;
move[0][0] = 0,move[0][1] = 1,move[0][2] = 0;
move[1][0] = 0,move[1][1] = -1,move[1][2] = 0;
move[2][0] = 0,move[2][1] = 0,move[2][2] = 1;
move[3][0] = 0,move[3][1] = 0,move[3][2] = -1;
move[4][0] = 1,move[4][1] = 0,move[4][2] = 0;
move[5][0] = -1,move[5][1] = 0,move[5][2] = 0;
while(cin >> tag >> n)
{
for(i = 0;i < n;++i)
{
for(j = 0;j < n;++j)
{
for(k = 0;k < n;++k)
cin >> map[i][j][k];
}
}
cin >> b.c >> b.r >> b.s;
cin >> d.c >> d.r >> d.s;
q.push(b);
map[b.s][b.r][b.c] = 0;
while(!q.empty())
{
b = q.front();
q.pop();
for(i = 0;i < 6;++i)
{
c.s = b.s + move[i][0];
c.r = b.r + move[i][1];
c.c = b.c + move[i][2];
if(c.s >= 0 && c.s < n && c.r >= 0 && c.r < n &&
c.c >= 0 && c.c < n)
{
if(map[c.s][c.r][c.c] == 'O')
{
map[c.s][c.r][c.c] = map[b.s][b.r][b.c] +1;
q.push(c);
}
if(c.s == d.s && c.r == d.r && c.c == d.c)
break;
}
}
}
cin >> tag;
if(map[d.s][d.r][d.c] != 'O')
cout << n << ' ' << (int)map[d.s][d.r][d.c] << endl;
else
cout << "NO ROUTE" << endl;
}
return 0;
}
- 北大2225题
- 北大1002题
- 北大1503题
- 北大1519题
- 北大1517题
- 北大1068题
- 北大2039题
- 北大1484题
- 北大2590题
- 北大2608题
- 北大1047题
- 北大1102题
- 北大1316题
- 北大3268题
- 北大2394题
- 北大2895题
- 北大2109题
- 北大1328题
- 仔细模拟一下你的数据库程序,你有没有发现在计算时(特别是多用户计算时)经常重复读取数据库数据?!这是数据库处理程序的性能的最主要的杀手。 (转)
- 北大2136题
- A Catalog of Local Windows Kernel-mode Backdoor Techniques—WIndows内核级后门技术
- [双语阅读]国际空间站宇航员冰茶、火鸡庆感恩节
- vc技巧
- 北大2225题
- 21世纪7种人才最抢手----李开复
- “左耳进右耳出”英语怎么说
- XP home版安装IIS方法
- 同事不仅仅是同事,还是朋友。
- 常见内存问题
- 时间越来越紧了!
- Widows下自旋锁的实现
- SQL Server安全认证知识【2】