为啥赋值不一样,就没输出呢(求调)
  • 板块P1605 迷宫
  • 楼主hard_learn
  • 当前回复10
  • 已保存回复11
  • 发布时间2024/3/2 21:54
  • 上次更新2024/3/3 09:34:33
查看原帖
为啥赋值不一样,就没输出呢(求调)
1053119
hard_learn楼主2024/3/2 21:54
#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int sx,sy,fx,fy;
int ans;
//sx,sy代表起点坐标,fx,fy代表终点坐标
int f[10][10],flag[10][10];
int d1[4]={-1,1,0,0};
int d2[4]={0,0,-1,1};
void dfs(int x,int y){
    if(x==fx&&y==fy){
        ans++;
        return ;
    }
    else{
        for(int i=0;i<4;i++){
            if(flag[x+d1[i]][y+d2[i]]==1&&f[x+d1[i]][y+d2[i]]==0){
                f[x][y]=1;
                dfs(x+d1[i],y+d2[i]);
                f[x][y]=0;
            }
        }
    }
}
int main(){
    cin>>n>>m>>t;
    cin>>sx>>sy>>fx>>fy;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            flag[i][j]=1;
        }
    }
    for(int i=1;i<=t;i++){
        int x,y;
        cin>>x>>y;
        flag[x][y]=0;
    }       
    dfs(sx,sy);
    cout<<ans<<endl;
    return 0;
}//根据题解改进代码
#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int sx,sy,fx,fy;
int ans;
//sx,sy代表起点坐标,fx,fy代表终点坐标
int f[10][10],flag[10][10];
int d1[4]={-1,1,0,0};
int d2[4]={0,0,-1,1};
void dfs(int x,int y){
    if(x==fx&&y==fy){
        ans++;
        return ;
    }
    else{
        for(int i=0;i<4;i++){
            if(flag[x+d1[i]][y+d2[i]]==0&&f[x+d1[i]][y+d2[i]]==0){
                f[x][y]=1;
                dfs(x+d1[i],y+d2[i]);
                f[x][y]=0;
            }
        }
    }
}
int main(){
    cin>>n>>m>>t;
    cin>>sx>>sy>>fx>>fy;
    memset(flag,0,sizeof(flag));
    for(int i=1;i<=t;i++){
        int x,y;
        cin>>x>>y;
        flag[x][y]=1;
    }       
    dfs(sx,sy);
    cout<<ans<<endl;
    return 0;
}//之前的错误代码
2024/3/2 21:54
加载中...