为什么75分?
查看原帖
为什么75分?
948410
dws_rwhy楼主2023/5/5 19:08
#include<bits/stdc++.h>
#define int long long 
using namespace std;
int a[150][150],d[150][150],f_min[15][15],maxn,n,used[15][15],flag[15][15];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
void dfs_max(int x,int y)
{
    if(x==1 && y==n)
    {
        if(d[x][y]>maxn)
            {
                 for(int i=1;i<=n;++i)
                 for(int j=1;j<=n;++j)
                    a[i][j]=d[i][j];
             maxn=d[x][y];          
            }   
         return;
        }
    if(d[x][y]<a[x][y]) return;
    for(int i=0;i<4;++i)
    {
        int tx=x+dx[i],ty=y+dy[i];
        if(tx>=1 && ty>=1 && tx<=n && ty<=n && !flag[tx][ty] && !used[tx][ty])
        {
            used[tx][ty]=1;
            d[tx][ty]=d[x][y]+1;
            dfs_max(tx,ty); 
            d[tx][ty]=0;
            used[tx][ty]=0;
        } 
    }
}
void dfs_min(int x,int y,int step)
{
    if(used[x][y] || x<1 || y<1 || x>n || y>n) return;
    if(step>=f_min[x][y]) return;
    f_min[x][y]=step;
    if(x==1 && y==n) return;
    used[x][y]=1;
    for(int i=0;i<4;++i)
    {
        int tx=x+dx[i],ty=y+dy[i];
        if(!flag[tx][ty]) dfs_min(tx,ty,step+1);
    }
    used[x][y]=0;
}
 main()
{
    int m;
    cin>>n>>m;
    while(m--)
    {
        int x,y;
        cin>>x>>y;
        flag[x][y]=1;
    }
    memset(f_min,0x3f,sizeof(f_min));
    dfs_min(n,1,1);
    memset(used,0,sizeof(used));
    d[n][1]=1; used[n][1]=1;
    dfs_max(n,1);
    cout<<maxn-f_min[1][n];
    return 0;
}
2023/5/5 19:08
加载中...