#P1030. 一笔画

image

dfs深搜就行,搜到就结束,然后用一个数组来记录路径,重点是回溯

using namespace std;
int sum=0;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int vis[20][20];
char mp[20][20];
char ans[200];
char dir[4]={'R','L','D','U'};
int n,m;
int f=0;
int sx,sy=0;
void dfs(int x,int y,int cnt){
	if(f==1){
		return;
	} 
	if(cnt==sum&&!f){
		f=1;
		for(int i=1;i<=cnt;i++){
			cout<<ans[i];
		}
		return;
	}
	for(int i=0;i<4;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(vis[nx][ny]||nx<1||nx>n||ny<1||ny>m||mp[nx][ny]=='#')continue;
		vis[nx][ny]=1;
		ans[cnt+1]=dir[i];
		dfs(nx,ny,cnt+1);
		vis[nx][ny]=0;
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
	    	cin>>mp[i][j];
	    	if(mp[i][j]=='.')sum++;
	    	if(mp[i][j]=='S'){
	    		sx=i;
	    		sy=j;
			}
		}
	}
	vis[sx][sy]=1;
	dfs(sx,sy,0);
	return 0;
} 
posted @ 2023-11-29 21:56  yufan1102  阅读(14)  评论(0)    收藏  举报