- dxd 的博客
GF-2023秋季集训=DFS-地图路径
- @ 2023-11-10 20:38:52
GF-2023秋季集训=DFS-地图路径
O1458迷宫路径
#include <iostream>
using namespace std;
int n,m,d[]{0,1,0,-1,0},ans=0,step;
//dy[]{1,0,-1,0};
char g[55][55];
struct node{
int x,y;
}a[10005];
void dfs(int x,int y){
if(x<1 || y<1 || x>n || y>m )return;
if(g[x][y]=='#')return;
if(x==n && y==m){
ans++;
cout<<ans<<":";
for(int i=1;i<=step;i++){
cout<<a[i].x<<","<<a[i].y<<"->";
}
cout<<x<<","<<y<<endl;
return;
}
for(int i=0;i<4;i++){
int nx=x+d[i];
int ny=y+d[i+1];
step++;
g[x][y]='#'; //.->#
a[step].x=x; //a[step]=(node){x,y};
a[step].y=y; //0->y
dfs(nx,ny);
a[step].y=0; //y->0 回溯
a[step].x=0; //x->0
g[x][y]='.';
step--;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)cin>>g[i][j];
dfs(1,1);
if(ans==0)cout<<"no";
return 0;
}
O1452
#include <bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int n,m,sx,sy,tx,ty,step,ans=INF,dx[]{0,0,1,-1},dy[]{1,-1,0,0};
char g[55][55];
int f[55][55];
void dfs(int x,int y){
/*
if(x==tx&&y==ty){
ans=min(ans,step);return;
}*/
if(step>f[x][y])return;
f[x][y]=step;
for(int i=0;i<4;i++){
int nx=x+dx[i],ny=y+dy[i];
char t=g[nx][ny];
if(t!='#'){
step++;
if(t=='x')step++;
g[nx][ny]='#';
dfs(nx,ny);
g[nx][ny]=t;
if(t=='x')step--;
step--;
}
}
}
int main() {
memset(g,'#',sizeof(g));
memset(f,0x3f,sizeof(f));
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>g[i][j];
if(g[i][j]=='r')sx=i,sy=j;
if(g[i][j]=='a')tx=i,ty=j;
}
}
g[sx][sy]='#';g[tx][ty]='@';step=0;
dfs(sx,sy);
ans=f[tx][ty];
if(ans==INF)cout<<"Impossible";
else cout<<ans;
return 0;
}