一眼最短路问题
#include<bits/stdc++.h>
using namespace std;
template <typename T> void read(T &x){
x=0;int f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+ch-'0';
x*=f;
}
int n;
int w[111][111];
int ans=0x7f;
bool vis[111];
void dfs(int k,int d,int x){
if(d>=ans) return;
if(k==n+1) ans=min(ans,d+w[x][1]);
else{
for(int i=1;i<=n;++i){
if(!vis[i]){
if(d+w[x][i]>ans) return;//剪枝!
vis[i]=1;
dfs(k+1,d+w[x][i],i);
vis[i]=0;
}
}
}
}
int main(){
read(n);
memset(w,0,sizeof(w));
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
read(w[i][j]);
memset(vis,0,sizeof(vis));
vis[1]=1;
dfs(2,0,1);
cout<<ans<<endl;
return 0;
}
附:
图论算法的代码实现一直都很让人难过 【叹气
刚刚CSDN吞了我一篇博客qwq
还是继续练着吧
热血总是很容易燃起来又很容易熄灭