39pts深搜 怎么判断一道题是bfs还是dfs?
查看原帖
39pts深搜 怎么判断一道题是bfs还是dfs?
1159426
rome1楼主2023/12/24 23:31

RT

#include <bits/stdc++.h>
using namespace std;
int n,m,sx,sy,fx,fy,ans=100000,a[305][305];
char c[305][305];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void dfs(int x,int y,int l){
	for(int i=0;i<=3;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx<=0||ny<=0||nx>n||ny>m)continue;
		else if(c[nx][ny]=='#')continue;
		else if(c[nx][ny]=='.'&&a[nx][ny]==0){
			a[nx][ny]=1;
			dfs(nx,ny,l+1);
			a[nx][ny]=0;
		}
		else if(c[nx][ny]>='A'&&c[nx][ny]<='Z'){
			for(int k=1;k<=n;k++){
				for(int j=1;j<=m;j++){
					if(c[k][j]==c[nx][ny]&&(k!=nx||j!=ny)){
						dfs(k,j,l+1);
					}
				}
			}
		}
		else if(c[nx][ny]=='='){
			ans=min(ans,l+1);
		}
	}
	return;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++){
    		cin>>c[i][j];
    		if(c[i][j]=='@'){
    			sx=i;
    			sy=j;
			}
			if(c[i][j]=='='){
				fx=i;
				fy=j;
			}
		}
	}    
	a[sx][sy]=1;
	dfs(sx,sy,0); 
	cout<<ans;
}

这是代码 求改进或解释为什么bfs更好以及如何选取合适搜索方式

2023/12/24 23:31
加载中...