您的位置:首页 > 其它

【图论】【RQNOJ】校园迷宫

2010-07-12 17:47 274 查看

题目描述

总算期中考了,鄙人被教育局分配到了SY学校,当然是陪着很多人的。不知转了多少次车,总算到了。可惜的是,SY学校整个像个迷宫一样,就在门口贴了张学校地图。鄙人就开始研究地图了,但是学校错综复杂,等找到目的地,早就开考了。为此,鄙人取出随身携带的微型电脑(不知道从哪来的),向网上发去了求助书。注:只能往4个方向走:上、下、左、右。

输入格式

第1行,二个数,N,M。
接下来是一个N*M的矩阵,表示这个学校。(有N行,M列)。矩阵由2个数字组成。0:路;1:墙。路能走,墙不能走(这是基本常识。不过还是提醒一下,不然哪个牛又要飞檐走壁了)。
再是2行,第1行2个数X1,Y1表示校门口的坐标(即校门口在矩阵的第X1行,第Y1列)。第2行2个数X2,Y2表示鄙人的考场的坐标(即校门口在矩阵的第X2行,第Y2列)。
数据范围:0<M,N<=2000。0〈X1,X2〈=N,0〈Y1,Y2〈=M。

输出格式

一个数,表示最少要走的步数。如果走不到,则输出 No Answer!

样例输入

#include<stdio.h>
int xx[4]={1,-1,0,0};
int yy[4]={0,0,1,-1};
struct ss
{
int x,y,len;
} line[2000001];
int l,r,n,m,ans;
int map[2001][2001];
bool v[2001][2001];
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;++i)
for (int j=1;j<=m;++j)
scanf("%d",&map[i][j]);
int x1,x2,y1,y2;
scanf("%d%d",&x1,&y1);
scanf("%d%d",&x2,&y2);
if (x1==x2&&y1==y2)
{
printf("0/n");
return 0;
}
r=1;
line[1].x=x1;
line[1].y=y1;
v[x1][y1]=true;
while (l<r)
{
++l;
int tex,tey;
for (int i=0;i<4;++i)
{
tex=line[l].x+xx[i];
tey=line[l].y+yy[i];
if (tex>0&&tex<=n&&tey>0&&tey<=m)
if ((map[tex][tey]==0)&&(!v[tex][tey]))
{
++r;
line[r].x=tex;
line[r].y=tey;
line[r].len=line[l].len+1;
v[tex][tey]=1;
if (tex==x2&&tey==y2)
{
printf("%d/n",line[r].len);
return 0;
}
}
}
}
printf("No Answer!/n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: