NOI2.5.6044 鸣人和佐助 题解(C++)

鸣人和佐助 题解(C++)

#include <bits/stdc++.h>
using namespace std;
int dx[5]={0,-1,0,1,0}; 
int dy[5]={0,0,1,0,-1};
//第一个不算,所以是四个方向
int main(){
	int n,m,t,x,y,qx,qy;
	cin>>n>>m>>t;
	int a[251][251];
	bool b[251][251][10] = {false};
	memset(a,2,sizeof(a));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			char c;
			scanf(" %c",&c);
			if(c=='*'){
				a[i][j]=0;
			}
			if(c=='#'){
				a[i][j]=1;
			}
			if(c=='@'){
				x=i;
				y=j;
				a[x][y]=2;
			}
			if(c=='+'){
				a[i][j]=0;
				qx=i;
				qy=j;
			}
		}
	}
	int i=0,j=1,h[201*201+5][4];
	h[1][0]=t;
	h[1][1]=x;
	h[1][2]=y;
	h[1][3]=0;
	while(i++<=j){
		x=h[i][1];
		y=h[i][2];
		for(int I=1;I<=4;I++){
			int xx=x+dx[I];
			int yy=y+dy[I];
			if(xx>n||xx<1||yy>m||yy<1)continue;
			if(a[xx][yy]==0&&(!b[xx][yy][h[i][0]])){
				j++;
				h[j][0]=h[i][0];
				h[j][1]=xx;
				h[j][2]=yy;
				h[j][3]=h[i][3]+1;
				b[xx][yy][h[i][0]]=1;
			}
			if(a[xx][yy]==1&&h[i][0]>0&&(!b[xx][yy][h[i][0]-1])){
				j++;
				h[j][0]=h[i][0]-1;
				h[j][1]=xx;
				h[j][2]=yy;
				h[j][3]=h[i][3]+1;
				b[xx][yy][h[j][0]]=1;
			}
			if(xx==qx&&yy==qy){
				cout<<h[j][3];
				return 0;
			}
		}
	}
	cout<<-1;
}
发布了31 篇原创文章 · 获赞 2 · 访问量 1301
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览