NYOJ - 58 最小步数

来源:互联网 发布:展柜制作成本核算软件 编辑:程序博客网 时间:2024/05/16 16:17

直接从给出的起点开始用QUEUE进行BFS就行,因为图式给出的固定的,所以难度不是太大。

 

描述

这有一个迷宫,有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 <cstdio>#include <cstring>#include <queue>using namespace std;struct node{    int i, j, step;};int maps[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}               };int toward[4][2] = {{-1,0}, {1, 0}, {0,1}, {0,-1}};bool vis[9][9];int step;int start_x, start_y;int end_x, end_y;int BFS();int main(){    int T;    scanf("%d", &T);    for (int i = 0; i < T; ++i)    {        memset(vis, false, sizeof(vis));        scanf("%d%d", &start_x, &start_y);        scanf("%d%d", &end_x, &end_y);        printf("%d\n", BFS());    }    return 0;}int BFS(){    queue<node> Q;    node cur, tmp;    cur.i = start_x;    cur.j = start_y;    cur.step = 0;    Q.push(cur);    while (!Q.empty())    {        cur = Q.front();        Q.pop();        if (cur.i == end_x && cur.j == end_y)            return cur.step;        for (int i = 0; i < 4; ++i)        {            tmp.i = cur.i + toward[i][0];            tmp.j = cur.j + toward[i][1];            tmp.step = cur.step + 1;            if (tmp.i >= 0 && tmp.i <= 8 && tmp.j >= 0 && tmp.j <= 8 && vis[tmp.i][tmp.j] == false && maps[tmp.i][tmp.j] == 0)            {                Q.push(tmp);                vis[tmp.i][tmp.j] = true;            }        }    }    return -1;}


 

0 0
原创粉丝点击