深搜
2025-08-07 17:05:19
发布于:上海
5阅读
0回复
0点赞
#include<iostream>
using namespace std;
typedef long long ll;
const int N=1e3+5;
ll n,vis[N],a[N][N];//vis[i]记录是否来过i号商务楼
ll ans=1e9;
void dfs(ll x,ll sum,ll step){
vis[x]=1;
if(sum>=ans)return;//如果>ans直接回溯
if(step==n){//当已经去过所有商务楼
ans=min(ans,sum+a[x][1]);//确保ans最小
return;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
dfs(i,sum+a[x][i],step+1);//如果没来过那就继续遍历
vis[i]=0;//回溯得让vis清空
}
}
return;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
dfs(1,0,1);
cout<<ans;
return 0;
}
这里空空如也
有帮助,赞一个