求助!DFS打完之后发现不会打结束和防重复,求补全
  • 板块P1605 迷宫
  • 楼主Niehongyu2013
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/15 23:10
  • 上次更新2023/12/16 10:42:42
查看原帖
求助!DFS打完之后发现不会打结束和防重复,求补全
846919
Niehongyu2013楼主2023/12/15 23:10
#include <iostream>
using namespace std;
int n,m,t,ans,sx,sy,fx,fy,tx,ty,way,bx,by,nx,ny;
bool a[100][100];
//See you again
void dfs()
{
    bx=nx,by=ny;
    way=4;
    a[nx][ny]=3;
    if(a[nx+1][ny]==2||a[nx][ny+1]==2||a[nx-1][ny]==2||a[nx][ny-1]==2)
    {
        ans++;
        nx=fx,ny=fy;
    }
    if(a[nx+1][ny]==1)
    way--;
    else if(a[nx+1][ny]==3)
    way--;
    if(a[nx][ny+1]==1)
    way--;
    else if(a[nx][ny+1]==3)
    way--;
    if(a[nx-1][ny]==1)
    way--;
    else if(a[nx-1][ny]==3)
    way--;
    if(a[nx][ny-1]==1)
    way--;
    else if(a[nx][ny-1]==3)
    way--;
    if(way==0)
    {
        a[nx][ny]=0;
        nx=bx,ny=by;
    }
    else if(a[nx+1][ny]=0)nx++;
    else if(a[nx][ny+1]=0)ny++;
    else if(a[nx-1][ny]=0)nx--;
    else if(a[nx][ny-1]=0)nx--;
    dfs();
    }
int main()
{
    memset(0,a,sizeof(a));
    cin>>n>>m>>t;
    cin>>sx>>sy>>fx>>fy;
    for(int i=0; i<n; i++)
        cin>>tx>>ty,a[tx][ty]=1;
    a[fx][fy]=2;
    nx=sx,ny=sy;
    dfs();
    }
	cout<<ans;
    return 0;
}
2023/12/15 23:10
加载中...