zoukankan      html  css  js  c++  java
  • 营救

    问题描述:
    铁塔尼号遇险了!他发出了求救信号。距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里。
    通过侦测,哥伦比亚号获取了一张海洋图。这张图将海洋部分化成nn个比较小的单位,其中用1标明的是陆地,用0标明是海洋。当然,船只能在海洋上行驶,且船只能从一个格子,移到相邻的四个格子。
    为了尽快赶到出事地点,哥伦比亚号最少需要走多远的距离。
    数据输入:
    从文件save.in中读入数据,第一行为n,下面是一个n
    n的0,1矩阵,表示海洋地图,最后一行为四个小于n的整数,分别表示哥伦比亚号和铁塔尼号的位置。
    数据输出:
    哥伦比亚号到铁塔尼号的最短距离,答案精确到整数。
    输入输出样例:
    save. in
    3
    001
    101
    100
    1 1 3 3
    save.out
    4
    数据范围说明:N<=1000。

    .
    .
    .
    .
    .
    分析
    广搜
    到达目的地就直接输出

    .
    .
    .
    .
    .
    程序:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; 
    int gry[800000][3],n,m,a[1010][1010],f[1010][1010];
    int x1,y1,x2,y2;
    
    void bfs()
    {
        int head=0,tail=1;
        while (head<tail)
        {
            head++;
            for (int i=0;i<=3;i++)
            {
                int x=gry[head][0]+d[i][0];
                int y=gry[head][1]+d[i][1];
                if (x>=1&&x<=n&&y>=1&&y<=n&&f[x][y]==0)
                {
                    tail++;
                    gry[tail][0]=x;
                    gry[tail][1]=y;
                    a[x][y]=gry[tail][2]=gry[head][2]+1; 
                    f[x][y]=1;
                }
                if (x==x2&&y==y2)
                {
                	printf("%d",a[x][y]);
                	return;
                }
            }
        }
    }
    int main()
    {
    	freopen("save.in","r",stdin);
    	freopen("save.out","w",stdout);
        scanf("%d",&n);
        memset(f,1,sizeof(f));
        for (int i=1;i<=n;i++)
        	for (int j=1;j<=n;j++)
        	{
        		char x;
        		cin>>x;
        		f[i][j]=(int)x-'0';
        	}
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        gry[1][0]=x1;
        gry[1][1]=y1;
        bfs();
    	fclose(stdin);
        fclose(stdout);
        return 0;
    }
    
  • 相关阅读:
    C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!
    Java8的新特性以及与C#的比较
    点旋转坐标变换
    vc++返回模块路径
    为什么不要 "lock(this)" ? lock object 并是readonly(转载)
    《黄帝内经》要义
    C++多线程编程简单实例
    c++ 获取文件大小
    c# 获取文件夹大小
    自动驾驶仿真工具的下载与安装
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/11094910.html
Copyright © 2011-2022 走看看