最小生成树之rst
来源:互联网 发布:淘宝买汽车靠谱吗 编辑:程序博客网 时间:2024/04/30 01:46
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <time.h>
using namespace std;
#define MAXN 1000
#define INF 0x3f3f3f3f
#define NOT_USED 0
#define USED 1
int n, cnt; // n:点个数 cnt:边条数
int g[MAXN][MAXN];
int ans[MAXN][MAXN];
int node[MAXN];
int weight;
void init(){
memset(g , 0 , sizeof(g) );
memset(ans , 0 , sizeof(ans) );
memset(node, NOT_USED, sizeof(node) );
weight = 0;
}
int get_rand(int left, int right){
return left + rand() % (right-left+1);
}
void dfs(int start){
// cout << node_index << endl;
node[start] = USED;
int tmp[MAXN];
int top_index = -1;
for (int i = 0; i < n; i++){
if ( NOT_USED == node[i] && 0 != g[start][i]){
top_index++;
tmp[top_index] = i;
}
}
if (top_index >= 0){
// 随机选择
for (int i = 0; i < 100; i++){
int left, right;
left = get_rand(0,top_index);
right = get_rand(0,top_index);
int tmp_index = tmp[left];
tmp[left] = tmp[right];
tmp[right] = tmp_index;
}
for (int i = 0; i <= top_index; i++){
int go_index = tmp[i];
if ( NOT_USED == node[go_index]){
printf(" %d -> %d [ label=\"%d\" arrowhead=\"none\" ];\n", start, go_index, g[start][go_index]);
weight += g[start][go_index];
dfs(go_index);
}
}
}
}
int main(){
srand(time(0));
// input data
cin >> n >> cnt;
for (int i = 0; i < cnt; i++){
int a, b, val;
cin >> a >> b >> val;
g[a][b] = val;
g[b][a] = val;
}
printf("digraph G {\n");
// start from 0
dfs(0);
printf("B[label=\"%d\"];\n", weight);
printf("}\n");
return 0;
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <time.h>
using namespace std;
#define MAXN 1000
#define INF 0x3f3f3f3f
#define NOT_USED 0
#define USED 1
int n, cnt; // n:点个数 cnt:边条数
int g[MAXN][MAXN];
int ans[MAXN][MAXN];
int node[MAXN];
int weight;
void init(){
memset(g , 0 , sizeof(g) );
memset(ans , 0 , sizeof(ans) );
memset(node, NOT_USED, sizeof(node) );
weight = 0;
}
int get_rand(int left, int right){
return left + rand() % (right-left+1);
}
void dfs(int start){
// cout << node_index << endl;
node[start] = USED;
int tmp[MAXN];
int top_index = -1;
for (int i = 0; i < n; i++){
if ( NOT_USED == node[i] && 0 != g[start][i]){
top_index++;
tmp[top_index] = i;
}
}
if (top_index >= 0){
// 随机选择
for (int i = 0; i < 100; i++){
int left, right;
left = get_rand(0,top_index);
right = get_rand(0,top_index);
int tmp_index = tmp[left];
tmp[left] = tmp[right];
tmp[right] = tmp_index;
}
for (int i = 0; i <= top_index; i++){
int go_index = tmp[i];
if ( NOT_USED == node[go_index]){
printf(" %d -> %d [ label=\"%d\" arrowhead=\"none\" ];\n", start, go_index, g[start][go_index]);
weight += g[start][go_index];
dfs(go_index);
}
}
}
}
int main(){
srand(time(0));
// input data
cin >> n >> cnt;
for (int i = 0; i < cnt; i++){
int a, b, val;
cin >> a >> b >> val;
g[a][b] = val;
g[b][a] = val;
}
printf("digraph G {\n");
// start from 0
dfs(0);
printf("B[label=\"%d\"];\n", weight);
printf("}\n");
return 0;
}
https://github.com/ismdeep/mst
0 0
- 最小生成树之rst
- 数据结构之最小生成树
- hdu2489之最小生成树
- hdu3371之最小生成树
- hdu2682之最小生成树
- 最小生成树之Swordfish
- 最小生成树之kruskal
- 最小生成树之Kruskal
- 最小生成树之Prim
- 数据结构之 最小生成树
- 最小生成树之普里姆
- 数据结构之最小生成树
- 最小生成树之 Kruskal
- 数据结构之最小生成树
- 最小生成树之poj2031
- 最小生成树之KRUSKAL
- 最小生成树之KRUSCAL
- 最小生成树之kruskal
- 1040. 有几个PAT(25)
- 【ACM】P2006、P2007、P2008、P2009、P2010代码演示
- coredump产生
- Linux if语句内判断参数
- 814
- 最小生成树之rst
- 【JavaScript】颗粒归仓
- Qt如何隐藏ListWidget的滚动条
- UVA_489
- 【English】四月英语总结
- windows10+python3环境搭建
- smartTabLayout参数详解
- python报告 No module named 'main'错误
- 编译使用glew指令