球球大佬帮我看看!
查看原帖
球球大佬帮我看看!
329866
dzdolrc楼主2020/6/17 21:51

只拿了30分,希望大佬能帮忙看看逻辑上哪里出现问题

#include<bits/stdc++.h>//0东 1南 2西 3北 
using namespace std;
int n,m,fx,fy;
int cx[4][3]={{0,0,0},{-1,-2,-3},{0,0,0},{1,2,3}},cy[4][3]={{1,2,3},{0,0,0},{-1,-2,-3},{0,0,0}},cf[4]={0,-1,2,1};
bool check[55][55];
char f;
int mapp[55][55];
struct pp{
	int x,y,sum,f;
}node,tmp,next;
queue <pp> p;
void bfs(){
	while(!p.empty()){
		tmp=p.front();
		p.pop();
		if(tmp.x==fx&&tmp.y==fy){
			cout<<tmp.sum;
			return;
		}
		for(int j=0;j<4;j++){
			next=tmp;
			if(cf[j]==2){
				tmp.f=(tmp.f+cf[j])%4;
				tmp.sum+=2;
			}
			else if(cf[j]==1){
				tmp.f=(tmp.f+cf[j])%4;
				tmp.sum++;
			}else if(cf[j]==-1){
				tmp.f=(tmp.f+4+cf[j])%4;
				tmp.sum++;
			}
			for(int i=0;i<3;i++){
				if(mapp[tmp.x+cx[tmp.f][i]][tmp.y+cy[tmp.f][i]]==1) break;
				if(check[tmp.x+cx[tmp.f][i]][tmp.y+cy[tmp.f][i]]&&tmp.x+cx[tmp.f][i]<=n&&tmp.y+cy[tmp.f][i]<=m&&tmp.y+cy[tmp.f][i]>1&&tmp.x+cx[tmp.f][i]>1){
					check[tmp.x+cx[tmp.f][i]][tmp.y+cy[tmp.f][i]]=false;
					node.x=tmp.x+cx[tmp.f][i];
					node.y=tmp.y+cy[tmp.f][i];
					node.f=tmp.f;
					node.sum=tmp.sum;
					node.sum++;
					p.push(node);
				}
			}
			tmp=next;
		}
	}
	cout<<"-1";
}
int main(){
	memset(check,true,sizeof(check));
	char temp;
	cin>>n>>m;
	for(int i=1;i<=n;i++){ 
		for(int j=1;j<=m;j++){
			cin>>mapp[i][j];
		}
	}
	cin>>node.x>>node.y>>fx>>fy>>temp;
	switch(temp){
		case 'S':
			node.f=1;
			break;
		case 'E':
			node.f=0;
			break;
		case 'W':
			node.f=2;
			break;
		case 'N':
			node.f=3;
			break;
	}
	for(int i=1;i<=n+1;i++){
		for(int j=1;j<=n+1;j++){
			if(mapp[i][j]==1) mapp[i-1][j]=mapp[i-1][j-1]=mapp[i][j-1]=1;
		}
	}
	fx++;
	fy++;
	node.sum=0;
	node.x++;
	node.y++;
	check[node.x][node.y]=false;
	p.push(node);
	bfs();
	return 0;
}
2020/6/17 21:51
加载中...