caioj.1041 简单的搜索剪枝

来源:互联网 发布:js点击加载更多的例子 编辑:程序博客网 时间:2024/05/16 11:49

一眼最短路问题


#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

还是继续练着吧


热血总是很容易燃起来又很容易熄灭


原创粉丝点击