kuangbin专题一 简单搜索 N - Find a way

原创 2018年04月15日 10:17:11

N - Find a way

 

很简单的一道题,双向bfs练手,只不过在判断是否出图的时候,y<m写成了y<n,wa了很多次,在测试数据1 5 YM@#.才发现错误。。。

#include<iostream>  
#include<cstring>  
#include<algorithm>  
#include<queue>  
using namespace std;  
const int _max=300;
const int _m=10000;
char mp[_max][_max];
int stepy[_max][_max],stepm[_max][_max];
bool visy[_max][_max],vism[_max][_max];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
struct node{
	int x,y;
	int t;
};
int n,m,kcount,scount;
int xy,yy,xm,ym;

bool check(node n1,bool vis[_max][_max]){
	if(n1.x<1||n1.x>n) return false;
	if(n1.y<1||n1.y>m) return false;
	if(!vis[n1.x][n1.y]) return false;
	return true;
}
void bfs(int sx,int sy,bool vis[_max][_max],int step[_max][_max]){
	queue<node> q;
	node now,next;
	now.x=sx;
	now.y=sy;
	now.t=0;
	step[sx][sy]=0;
	vis[now.x][now.y]=0;
	q.push(now);
	scount=0;
	while(!q.empty()){
		now=q.front();
		q.pop();	
	    if(scount==kcount){
			return;
		}
		for(int i=0;i<4;i++){
		next.x=now.x+dx[i];
		next.y=now.y+dy[i];
		next.t=now.t+1;
		if(!check(next,vis)) continue;
		vis[next.x][next.y]=0;
		if(mp[next.x][next.y]=='@'){
			scount++;
			step[next.x][next.y]=next.t;
		}  

		q.push(next);
	    }
	}
}
int main()
{
	while(cin>>n>>m){
		memset(visy,1,sizeof(visy));
		memset(vism,1,sizeof(vism));
		memset(stepy,100000,sizeof(stepy));
		memset(stepm,100000,sizeof(stepm));
		kcount=0;
		int kfcmin=_m;
		for(int i=1;i<=n;i++)
		  for(int j=1;j<=m;j++){
		  	cin>>mp[i][j];
		  	if(mp[i][j]=='@')
		  	   {
		  	   	kcount++;
				}
				if(mp[i][j]=='#')
				vism[i][j]=visy[i][j]=0;
				if(mp[i][j]=='Y'){
					xy=i;
					yy=j;
				}
				if(mp[i][j]=='M'){
					xm=i;ym=j;
				}
          }
          bfs(xy,yy,visy,stepy);
          bfs(xm,ym,vism,stepm);
          for(int i=1;i<=n;i++)
		      for(int j=1;j<=m;j++){
              	if(mp[i][j]=='@'&&stepy[i][j]!=0){
              	kfcmin=min(stepy[i][j]+stepm[i][j],kfcmin);
              }
			  }
			  cout<<kfcmin*11<<endl;
	}
}

[kuangbin]专题一 简单搜索 N - Find a way

Find a way HDU - 2612Problem DescriptionPass a year learning in Hangzhou, yifenfei arrival hometown ...
  • q3818908
  • q3818908
  • 2017-08-28 19:11:28
  • 138

kuangbin带你飞 专题一 简单搜索 (题解)

POJ 3279  题意:黑白的板,每次选择一个十字形翻转(十字板内黑白互换,若是边界则不管),求最小将原图变为全白的策略。 题解:枚举第一行翻转情况(二进制),2^c,然后验证,由于第一行确定...
  • Miracle_ma
  • Miracle_ma
  • 2015-06-30 12:28:10
  • 1301

[kuangbin带你飞]专题一 简单搜索 A POJ1321

题目地址:https://vjudge.net/contest/65959#problem/A 思路:简单的dfs搜索,因为不能放在同一行,所以从第一行开始逐行往下,每行从第一个开始,判断当前位置是否...
  • l718531794
  • l718531794
  • 2016-09-16 21:50:45
  • 265

[kuangbin带你飞]专题一 简单搜索 K题迷宫

#include using namespace std; int map[5][5]; int dx[4]={1,-1,0,0}; int dy[4]={0,0,-1,1};//dx[]和dy[...
  • xunfengdumo
  • xunfengdumo
  • 2017-04-14 16:20:37
  • 222

[kuangbin带你飞]专题一 简单搜索

简单搜索
  • hsj970319
  • hsj970319
  • 2017-01-22 20:23:14
  • 1021

[kuangbin带你飞]专题一 简单搜索C

Description Farmer John has been informed of the location of a fugitive cow and wants to catch her ...
  • zjy2015302395
  • zjy2015302395
  • 2016-11-18 16:36:01
  • 158

[kuangbin带你飞]专题一 简单搜索 D

Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give mor...
  • zjy2015302395
  • zjy2015302395
  • 2016-11-18 16:55:17
  • 219

[kuangbin带你飞]专题一 简单搜索 K - 迷宫问题 POJ 3984

K - 迷宫问题 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status...
  • qq1319479809
  • qq1319479809
  • 2015-11-12 22:31:24
  • 257

[kuangbin带你飞]专题一 简单搜索 -K - 迷宫问题

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13824   Accepted: 8256 D...
  • Amaswz
  • Amaswz
  • 2016-04-12 15:49:49
  • 254

[kuangbin带你飞]专题一 简单搜索 N - Find a way

N - Find a way Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit...
  • Amaswz
  • Amaswz
  • 2016-04-16 12:27:42
  • 154
收藏助手
不良信息举报
您举报文章:kuangbin专题一 简单搜索 N - Find a way
举报原因:
原因补充:

(最多只允许输入30个字)