Floyd+DFS 90分,求助!
查看原帖
Floyd+DFS 90分,求助!
934196
yonghang楼主2023/4/15 20:27
#include<bits/stdc++.h>
using namespace std;
int n,m,d[1050][1005],p,anss=0x3f3f3f3f; 
bool bo[1005],vis[1005];
void dfs(int x,int m,int ss)
{
    if(m>=p)
    {
        anss=min(anss,ss+d[x][n]);
        return;
    }
    else
    {
        for(int i=1;i<=n;i++)
        {
            if(!vis[i]&&bo[i])
            {
                vis[i]=true;
                dfs(i,m+1,ss+d[x][i]);
                vis[i]=false;
            }
        }
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
         for(int j=1;j<=n;j++)
         {
            scanf("%d",&d[i][j]);
        }
    }
    for(int k=1;k<=n;k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
            }
        }
    }
    scanf("%d",&p);
    for(int i=1;i<=p;i++)
    {
        int x;
        scanf("%d",&x);
        bo[x]=true; 
    }
    vis[1]=true;
    dfs(1,1,0);
    printf("%d",anss);
} 
2023/4/15 20:27
加载中...