社区讨论

为什么会这样

P1238走迷宫参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lrm0tm93
此快照首次捕获于
2024/01/20 20:03
2 年前
此快照最后确认于
2024/01/20 21:50
2 年前
查看原帖
写题时做到35pts,看了讨论版后发现
CPP
#include<bits/stdc++.h>
using namespace std;

bool map_[50][50],vis[50][50];
int n,m,a1,b1,a2,b2,r[500][2],k,fx[4][2]={{0,-1},{-1,0},{0,1},{1,0}},cnt;


void dfs(int a,int b){
    if(a==a2&&b==b2){
        for(int i=0;i<k;i++) cout<<"("<<r[i][0]+1<<","<<r[i][1]+1<<")"<<"->";
        cout<<"("<<a2+1<<","<<b2+1<<")";
        cout<<endl;
        cnt++;
        return ;
    }
    if(a<0 || b<0 || a>=n || b>=m) return ;
    for(int i=0;i<4;i++){
        r[k][0]=a,r[k][1]=b;
        k++;
        int xx=a+fx[i][0],yy=b+fx[i][1];
        //cout<<i<<" "<<k<<"  "<<fx[i][0]<<" "<<fx[i][1]<<"  "<<xx<<" "<<yy<<"  "<< (xx>=0 && yy>=0 && xx<n && yy<m) <<" "<< (!vis[xx][yy]) <<" "<< (map_[xx][yy]) <<endl;
        if(xx>=0 && yy>=0 && xx<n && yy<m && !vis[xx][yy] && map_[xx][yy]) vis[xx][yy]=1,dfs(xx,yy),vis[xx][yy]=0;
        k--;
    }
}

int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>map_[i][j];
    //for(int i=0;i<n;i++){
    //    for(int j=0;j<m;j++) cout<<map_[i][j];
    //    cout<<endl;
    //}
    cin>>a1>>b1>>a2>>b2,a1--,b1--,a2--,b2--;
    vis[a1][b1]=1;//L35
    dfs(a1,b1);
    if(cnt==0) cout<<-1;
}
加上第35行的代码后便能AC,而不加只有35pts,运行错误数据发现路径输出了两遍,请问一下有没有大佬知道这是为什么。

回复

1 条回复,欢迎继续交流。

正在加载回复...