蒟蒻求大佬帮助
查看原帖
蒟蒻求大佬帮助
181521
珈乐唯毒楼主2020/5/6 19:11

蜜汁WaQAQ

#include<bits/stdc++.h>
using namespace std;
struct lyf{
	int x,y;
	lyf(int x,int y):x(x),y(y){};
};
bool q[505][505][5][5];
deque<lyf> p;
int dx[5]={0,1,1,-1,-1};
int dy[5]={0,-1,1,1,-1};
bool vis[505][505];
int n,m,d[505][505];
string s;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>s;
		for(int j=1;j<=s.size();j++){
			if(s[j-1]=='\\'){
				q[i][j][2][2]=0;
				q[i+1][j+1][0][0]=0;
				q[i+1][j][0][2]=1;
				q[i][j+1][2][0]=1;
			}
			if(s[j-1]=='/'){
				q[i][j][2][2]=1;
				q[i+1][j+1][0][0]=1;
				q[i+1][j][0][2]=0;
				q[i][j+1][2][0]=0;
			}
		}
	}
	p.push_front(lyf(1,1));
	memset(d,-1,sizeof(d));
	vis[1][1]=1;
	d[1][1]=0;
	while(!p.empty()){
		int sx=p.front().x;
		int sy=p.front().y;
		if(sx==n+1&&sy==m+1)break;
		p.pop_front();
		for(int i=1;i<=4;i++){
			int tx=sx+dx[i];
			int ty=sy+dy[i];
			if(vis[tx][ty]==0&&tx>=1&&ty>=1&&tx<=n+1&&ty<=m+1){
				vis[tx][ty]=1;
				if(q[sx][sy][dx[i]+1][dy[i]+1]==1){
					d[tx][ty]=d[sx][sy]+1;
					p.push_back(lyf(tx,ty));
				}
				if(q[sx][sy][dx[i]+1][dy[i]+1]==0){
					d[tx][ty]=d[sx][sy];
					p.push_front(lyf(tx,ty));
				}			
			}

		}
	}
	if(d[n+1][m+1]==-1){
		cout<<"NO SOLUTION";
		return 0;
	}
	cout<<d[n+1][m+1];
	return 0;
}
2020/5/6 19:11
加载中...