最少步数
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述
这有一个迷宫,有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
来源
[苗栋栋]原创
上传者
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述
这有一个迷宫,有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
来源
[苗栋栋]原创
上传者
苗栋栋
daima :
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
int n,kx,ky,jx,jy;
int xa[4]={0,0,1,-1};
int ya[4]={1,-1,0,0};
struct node{
int xx,yy,bushu;
};
int map[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}
};
void disk()
{
queue<node> que;
bool fafe[10][10];
memset(fafe,true,sizeof(fafe));
node qian,now;
now.xx=kx;now.yy=ky;now.bushu=0;
que.push(now);
fafe[kx][ky]=false;
int ll=0;
while (!que.empty())
{
qian=que.front();
que.pop();
if (qian.xx==jx&&qian.yy==jy)
{
ll=qian.bushu;
break;
}
for (int i=0;i<4;i++)
{
int lx=qian.xx+xa[i];
int ly=qian.yy+ya[i];
if (lx<0||ly<0||lx==9||ly==9||map[lx][ly]==1||!fafe[lx][ly])
continue;
now.xx=lx;now.yy=ly;now.bushu=qian.bushu+1;
que.push(now);
fafe[lx][ly]=false;
}
}
printf("%d\n",ll);
}
int main()
{
scanf("%d",&n);
while (n--)
{
scanf("%d%d%d%d",&kx,&ky,&jx,&jy);
if (kx==jx&&ky==jy)
{
printf("0\n");
continue;
}//printf(" 666\n");
disk();
// printf(" 666\n");
}
return 0;
}