求助,悬一关
  • 板块P1189 SEARCH
  • 楼主shexiaopeng
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/8 21:31
  • 上次更新2024/10/9 08:13:53
查看原帖
求助,悬一关
1114147
shexiaopeng楼主2024/10/8 21:31

不是bfs或dfs的新方法:

#include<bits/stdc++.h>
using namespace std;
char a[55][55];
int nz[55][55][2];
int r,c;
void N(int k){
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(nz[i][j]==k){
				for(int s=i-1;s>=1;s--){
					if(a[s][j]=='X')break;
					nz[s][j][1]=k+1;
				}
			}
		}
	}
}
void S(int k){
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(nz[i][j]==k){
				for(int s=i+1;s<=c;s++){
					if(a[s][j]=='X')break;
					nz[s][j]=k+1;
				}
			}
		}
	}
}
void W(int k){
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(nz[i][j]==k){
				for(int s=j-1;s>=1;s--){
					if(a[i][s]=='X')break;
					nz[i][s]=k+1;
				}
			}
		}
	}
}
void E(int k){
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(nz[i][j]==k){
				for(int s=j+1;s<=c;s++){
					if(a[i][s]=='X')break;
					nz[i][s]=k+1;
				}
			}
		}
	}
}
int main(){
	cin>>r>>c;
	int tx=0,ty=0;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			cin>>a[i][j];
			if(a[i][j]=='*'){
				tx=i,ty=j;
			}
		}
	}
	int n;
	cin>>n;
	nz[tx][ty]=1;
	for(int k=1;k<=n;k++){
		string ks;
		cin>>ks;
		if(ks=="NORTH"){
			N(k);
		}
		if(ks=="SOUTH"){
			S(k);
		}
		if(ks=="WEST"){
			W(k);
		}
		if(ks=="EAST"){
			E(k);
		}
	}
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(nz[i][j]==n+1)cout<<"*";
			else{
				if(a[i][j]=='*')a[i][j]='.'; 
				cout<<a[i][j];
			}
		}
		cout<<endl;
	}
	
	return 0;
}

90分,求调!

2024/10/8 21:31
加载中...