nyoj 58 最小步数

来源:互联网 发布:js require函数的用法 编辑:程序博客网 时间:2024/04/29 22:27
难度: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)分别表示起点的行、列,终点的行、列。
输出
输出最少走几步。
样例输入
23 1  5 73 1  6 7
样例输出
1211
#include<stdio.h>#include<queue>//队列头文件using namespace std;int d[4][2]={-1,0,0,1,1,0,0,-1}; //搜索方向struct point{  int x,y,step;};int bfs(point s,point t,int map[9][9]){     queue<point> que;//建立队列      int i; point p;  //临时中间变量  que.push(s);       //真心不知道注释出为什么是不对的,就是不能AC// while(1)// {//  if(s.x==t.x&&s.y==t.y) //找到位置//    return s.step;// for(i=0;i<4;++i)//  {//    p.x=s.x+d[i][0];//  p.y=s.y+d[i][1];////  if(p.x<0||p.x>8||p.y<0||p.y>8)  //超出临界////     continue;  //继续走// if(map[p.x][p.y]==0) //此路可走//  {//  map[p.x][p.y]==1; //走过标记//p.step=s.step+1;//增加步数//que.push(p)  ;//位置入队 //  } //   //  } //    s=que.front();//继续搜索//que.pop();// 并且出队 // }    while(1)    {        if(s.x==t.x&&s.y==t.y)            return s.step;        for(i=0;i<4;++i)        {            p.x=s.x+d[i][0];            p.y=s.y+d[i][1];            if(map[p.x][p.y]==0)            {                p.step=s.step+1;                map[p.x][p.y]=1;                que.push(p);            }        }        s=que.front();        que.pop();        }}int main(){ int T; point start ,end;//定义结构体开始位置及末位置 scanf("%d",&T); while(T--) {  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,                   };  scanf("%d%d%d%d",&start.x,&start.y,&end.x,&end.y);  map[start.x][start.y]=1;  start.step=0;  printf("%d\n",bfs(start,end,map)); }return 0;} 


 

 

 

0 0
原创粉丝点击