最小生成树模板
来源:互联网 发布:7号人的粘土世界淘宝 编辑:程序博客网 时间:2024/06/05 10:34
给出两个点的距离,问你可以不可以由这些点组成一棵树,我们首先构造一个最小生成树,然后比较各各点之间的距离是否与题目给出的距离相等,可以用dfs搜索整张图的每两个点之间的距离.下面给的做法非dfs做的,用一个数组f[][],记录x,y两点之间的距离,算距离的时候是通过目前点的前驱找,也就是说需要一个数组记录前驱,这样就可以不用dfs了,
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 2010; const int INF = 0x3f3f3f3f; int graph[maxn][maxn]; int prior[maxn]; int visit[maxn]; int dis[maxn]; int f[maxn][maxn]; int n; bool check() { for(int i = 0; i < n; i++) { dis[i] = INF; if(graph[i][i] != 0) return false; for(int j = i+1 ; j < n; j++) { if(graph[i][j] != graph[j][i] || graph[i][j] == 0) return false; } } memset(visit,0,sizeof(visit)); memset(prior,-1,sizeof(prior)); memset(f,0,sizeof(f)); int cent = n; dis[0]=0; while(cent--)//循环n次是因为要初始化 { int min = -1; for(int i = 0; i < n; i++) { if(!visit[i] && (min == -1 || dis[i] < dis[min])) { min = i; } } for(int i = 0; i < n; i++)//在prim算法里面增加这层循环里面的内容算距离 { if(visit[i])//必须是已经访问过的点,才能算距离 { f[i][min] = f[min][i] = f[i][prior[min]] + dis[min]; } } visit[min] = true; for(int i = 0; i < n; i++) { if(dis[i] > graph[min][i] ) { dis[i] = graph[min][i]; prior[i] = min;//记录前驱 } } } for(int i = 0; i < n; i++) { for(int j = 0 ; j < n; j++) { if(f[i][j] != graph[i][j]) { return false; } } } return true; } int main() { #ifdef xxz freopen("in","r",stdin); #endif // xxz while(cin>>n) { for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) { cin>>graph[i][j]; } if(check()) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
0 0
- 最小生成树模板
- 最小生成树模板
- 最小生成树---模板
- 最小生成树模板
- 最小生成树 模板
- 最小生成树(模板)
- 最小生成树模板
- 最小生成树模板
- 最小生成树模板
- 最小生成树【模板】
- 最小生成树【模板】
- 最小生成树模板
- 最小生成树模板
- 最小生成树 模板
- 最小生成树模板.
- 最小生成树模板
- 【模板】最小生成树
- 最小生成树模板
- UVa #12219 Common Subexpression Elimination (例题11-1)
- 程序员需要自问的 10 个问题,其实不只使用于程序员
- C++中相对路径与绝对路径以及斜杠与反斜杠的区别
- linux 免密码免yes用户名 ssh互信建立
- Android笔记:invalidate()和postInvalidate() 的区别及使用
- 最小生成树模板
- fseek函数
- PHP5.3, PHP5.4, PHP5.5新特性
- 和菜鸟一起学linux之GCC内嵌汇编简单实例
- PHP __set() __get() __isset() __unset() 四个方法的应用
- MFC命名规则
- Spring MVC 中的基于注解的 Controller
- 第12章 类 —— 第3节 类的作用域及名字查找
- 使用libevent进行多线程socket编程demo