为什么会这样
  • 板块P1238 走迷宫
  • 楼主qxs_ck
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/1/20 20:02
  • 上次更新2024/1/20 21:50:09
查看原帖
为什么会这样
676105
qxs_ck楼主2024/1/20 20:02

写题时做到35pts,看了讨论版后发现

#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,运行错误数据发现路径输出了两遍,请问一下有没有大佬知道这是为什么。

2024/1/20 20:02
加载中...