必威体育Betway必威体育官网
当前位置:首页 > IT技术

【C++广度搜索】营救

时间:2019-07-17 23:39:59来源:IT技术作者:seo实验室小编阅读:63次「手机版」
 

解救

我想不会有什么帮助的索引

队列我有写过一篇题解来说明,见:【C++广度搜索入门】面积

这是我的第二篇广搜题解,可能仍有众多不足,请大家多指教,欢迎与我讨论

题目

问题 B: 营救

时间限制: 1 Sec  内存限制: 128 MB

题目描述

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

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

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

输入

第一行为n,下面是一个n*n的0、1矩阵,表示海洋地图

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

输出

哥伦比亚号到铁塔尼号的最短距离.

样例输入

3
001
101
100
1 1 3 3

样例输出

4

提示

N<=1000

题解

输入那里我卡了很久,请注意输入的处理

#include<bits/stdc++.h>
using namespace std;
struct hhh
{
	int h,l,s;//行,列,步数 
}qwq[1000005];
int jz[1005][1005]={0},vis[1005][1005]={0};
int	main()
{
	int bh[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
	int head,tail,ax,ay,bx,by,flag=0,n,nx,ny;
	char ch;
	scanf("%d",&n);
	//由于输入是001,,100这样的,所以为了读1,0,0,而不是100,先转化成字符型再转化成整型,达到一个个读入 
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(cin>>ch)	jz[i][j]=ch-'0';
		}
	}
	scanf("%d %d %d %d",&ax,&ay,&bx,&by);
	//队列初始化 
	head=1;tail=1;
	qwq[tail].h=ax;
	qwq[tail].l=ay;
	qwq[tail].s=0;
	tail++;
	vis[ax][ay]=1;
	while(head<tail)
	{
		for(int i=0;i<4;i++)
		{
			nx=qwq[head].h+bh[i][0];
			ny=qwq[head].l+bh[i][1];
			if(nx<1||nx>n||ny<1||ny>n)
				continue;
			if(jz[nx][ny]==0&&vis[nx][ny]==0)
			{
				vis[nx][ny]=1;
				qwq[tail].h=nx;//入队 
				qwq[tail].l=ny;
				qwq[tail].s=qwq[head].s+1;
				tail++;
			}
			if(nx==bx&&ny==by)//到达目的地 
			{
				flag=1;break;
			}
		}
		if(flag==1)	break;
		head++;//不管有没有新成员入队都要对已有的成员出队操作 
	}
	//tail指向队尾(最后一个元素的下一个位置,所以-1) 
	cout<<qwq[tail-1].s<<endl;
	return 0;
}

相关阅读

常见十大(内部)排序算法 - Sorting Algorithms C++

基本概念 内部和外部排序 内部排序在这里指的是只用到了电脑内存而不使用外存的排序方式。相对的,外部排序就是同时动用了电脑内

C/C++实现矩阵各种运算

程序很简单,重要的是二维指针的动态分配内存 type **Matrix ;//row为行,col为列 Matrix=(type **) malloc(row*sizeof(type *)

数据结构与算法分析-C++描述 第7章 插入排序(insertion

插入排序(insertionSort):       插入排序是最简单的排序算法之一。插入排序由趟排序组成,对于到,插入排序保证从位置0到上的元素已

C++中std::ostringstream输出用法

C++中std::ostringstream输出用法 一、简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中。ostrin

c++圈圈叉叉游戏

c++圈圈叉叉游戏  #include <iostream> #include<string> #define SIZE 4//格子大小为4*4 using std::cout; using std::end

分享到:

栏目导航

推荐阅读

热门阅读