dfs 70分,求助!!

回复帖子

@tuzhewen 2019-05-03 15:48 回复
#include<bits/stdc++.h>
using namespace std;
int n,m,t,Map[6][6],ans,flag[6][6];
int sx,sy,fx,fy,xxx=1;
int p[4][2]={0,1 , 1,0 , -1,0 , 0,-1};
struct pos{
    int x,y;
}a[30];
bool cmp(pos b,pos c)
{
    if(b.x!=c.x) return b.x<c.x;
    else return b.y<c.y;
}
void dfs(int zzx,int zzy)
{
    if(zzx==fx && zzy==fy)
    {
        ans++;
        return;
    }
    for(int i=0;i<4;i++)
    {
        int nx,ny;
        nx=zzx+p[i][0];
        ny=zzy+p[i][1];
        if(zzx>0 && zzx<=n && zzy>0 && zzy<=m && Map[nx][ny]==1 && !flag[nx][ny])
        {
            flag[nx][ny]=1;
            dfs(nx,ny);
            flag[nx][ny]=0;
        }
    }
}
int main()
{
    cin>>n>>m>>t;
    cin>>sx>>sy>>fx>>fy;
    for(int i=1;i<=t;i++)
    {
        cin>>a[i].x>>a[i].y;
    }
    sort(a+1,a+1+t,cmp);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(i==a[xxx].x && j==a[xxx].y)
            {
                Map[i][j]=0;
                xxx++;
            }
            else
            {
                Map[i][j]=1;
            }
        }
    }
    dfs(sx,sy);
    cout<<ans;
    return 0;
}
反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。