码迷,mamicode.com
首页 > 其他好文 > 详细

【题解】营救

时间:2019-01-17 21:24:21      阅读:436      评论:0      收藏:0      [点我收藏+]

标签:str   程序   部分   open   click   style   ack   getchar   必须   

题目描述

  铁塔尼号遇险了!他发出了求救信号。距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里。

  通过侦测,哥伦比亚号获取了一张海洋图。这张图将海洋部分分化成n×n个比较小的单位,其中用1标明的是陆地,用0标明是海洋。船只能从一个格子,移到相邻的四个格子。

  为了尽快赶到出事地点,哥伦比亚号最少需要走多远的距离。

 

输入输出格式

输入格式

  第一行为整数n(n≤1000),下面是一个n×n的0、1矩阵,表示海洋地图;

  最后一行为四个小于n的整数,分别表示哥伦比亚号和铁塔尼号的位置。

输出格式

  哥伦比亚号到铁塔尼号的最短距离,答案精确到整数。

 

样例

输入样例

3

001

101

100

1 1 3 3

输出样例

4

 

题解

  因为是船,所以自然就只能在海上行驶,即只能在值为0的上走,所有是需要对图遍历一次,很明显是搜搜索题。

  这题表面上看起来数据大,但实际上用BFS的话只需要n方的时间复杂度,只要注意好不要走重复的点就好。

技术分享图片
#include <iostream>
#include <cstdio>
#include <queue>

#define MAX_N 1000

using namespace std;

int n;
int sx, sy, tx, ty;
const int dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, -1, 1};
int f[MAX_N | 1][MAX_N | 1];
queue<int> qx, qy;

int main()
{
    scanf("%d", &n);
    char ch;
    for(register int i = 1; i <= n; ++i)
    {
        getchar();
        for(register int j = 1; j <= n; ++j)
        {
            ch = getchar();
            f[i][j] = (ch == 1);
        }
    }
    scanf("%d%d%d%d", &sx, &sy, &tx, &ty);
    int cnt = 0, x, y;
    qx.push(sx);
    qy.push(sy);
    f[sx][sy] = 1;
    while(!qx.empty())
    {
        for(register int I = qx.size(); I; --I)
        {
            x = qx.front();
            y = qy.front();
            qx.pop();
            qy.pop();
            if(x == tx && y == ty) return printf("%d", cnt), 0;
            for(register int i = 0; i < 4; ++i)
            {
                if(x + dx[i] < 1 || x + dx[i] > n || y + dy[i] < 0 || y + dy[i] > n) continue;
                if(f[x + dx[i]][y + dy[i]]) continue;
                f[x + dx[i]][y + dy[i]] = 1;
                qx.push(x + dx[i]);
                qy.push(y + dy[i]);
            }
        }
        ++cnt;
    }
    return 0;
}
参考程序

 

【题解】营救

标签:str   程序   部分   open   click   style   ack   getchar   必须   

原文地址:https://www.cnblogs.com/kcn999/p/10284339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!