DFS 50分
  • 板块P1605 迷宫
  • 楼主Double_Light
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/7/9 13:32
  • 上次更新2023/11/3 10:55:44
查看原帖
DFS 50分
761137
Double_Light楼主2023/7/9 13:32

DFS 里面没用方向数组,一个一个方向判断的

a,b,c,da,b,c,d 为起点和终点的坐标

mgmg 数组是迷宫,00 是能走的,11 是障碍/已经走过的

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,t,a,b,c,d,x,y,ans;
int mg[10][10];
void dfs(int i,int j){
	if(i+1<=n&&mg[i+1][j]!=1){
		if(i+1==c&&j==d)ans++;
		else{
			mg[i++][j]=1;
			dfs(i,j);
			mg[--i][j]=0;
		}
	}
	if(j+1<=m&&mg[i][j+1]!=1){
		if(i==c&&j+1==d)ans++;
		else{
			mg[i][j++]=1;
			dfs(i,j);
			mg[i][--j]=0;
		}
	}
	if(i-1>=1&&mg[i-1][j]!=1){
		if(i-1==c&&j==d)ans++;
		else{
			mg[i--][j]=1;
			dfs(i,j);
			mg[++i][j]=0;
		}
	}
	if(j-1>=m&&mg[i][j-1]!=1){
		if(i==c&&j-1==d)ans++;
		else{
			mg[i][j--]=1;
			dfs(i,j);
			mg[i][++j]=0;
		}
	}
}
int main(){
    cin>>n>>m>>t;
    cin>>a>>b>>c>>d;
    for(int i=1;i<=t;i++){
    	cin>>x>>y;
    	mg[x][y]=1;
	}
	dfs(a,b);
	cout<<ans;
    return 0;
}

附上下载的数据#2:

输入

5 5 5 
1 2 5 5
2 1
2 2
2 3
2 4
3 4

正确输出 1010,这个代码输出 11

2023/7/9 13:32
加载中...