poj2395 & poj 1751
来源:互联网 发布:sql字段添加内容 编辑:程序博客网 时间:2024/04/29 21:12
poj 2395 prim的模板题,没有什么可以说的。
1751 还是prim。只是有的边已经处理好了,不用继续处理。边的权值改为0,求最小生成树。
边!0 就输出!
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n;
double value[1000][1000]={};
struct node
{
int x,y;
};
node data[1000]={};
struct node2
{
int index;
double dis;
};
void prim()
{
bool visit[1000]={0};
visit[1] = 1;
node2 dis[1000];
for(int i = 1; i <= n; i++)
{
dis[i].dis = value[1][i];
dis[i].index = 1;
}
for(int i = 2; i <= n; i++)
{
double mi = 1000000000000001;
int mark;
for(int j = 1; j <= n; j++)
if(!visit[j] && dis[j].dis < mi)
{
mark = j;
mi = dis[j].dis;
}
if(mi > 0.5)
printf("%d %d\n",dis[mark].index,mark);
visit[mark] = 1;
for(int j = 1; j <= n; j++)
if(!visit[j] && value[mark][j] < dis[j].dis)
{
dis[j].index = mark;
dis[j].dis = value[mark][j];
}
}
}
int main()
{
scanf("%d",&n);
for(int i = 1; i <= n; i++)
scanf("%d%d",&data[i].x,&data[i].y);
for(int i = 1; i < n; i++)
for(int j = i +1 ; j <= n; j++)
{
double dis = (data[i].x - data[j].x)*(data[i].x - data[j].x) + (data[i].y - data[j].y)*(data[i].y - data[j].y);
value[i][j] = value[j][i] = dis;
}
int m,x,y;
scanf("%d",&m);
for(int i = 0; i < m; i++)
{
scanf("%d%d",&x,&y);
value[x][y] = 0;
value[y][x] = 0;
}
prim();
return 0;
}
- poj2395 & poj 1751
- poj2395
- poj2395 kruskal
- POJ2395--Out of Hay
- poj2395 最小生成树
- POJ2395---Out of Hay
- POJ2395 -- Prim算法
- poj2395解题报告
- POJ2395--Out of Hay
- poj2395 解题报告
- POJ2395-Out of Hay
- POJ2395 Out of Hay
- POJ2395 Out of Hay
- POJ2395 解题报告
- poj2395 Kruskal最小生成树
- POJ2395 Out of Hay 【Dijkstra】
- POJ2395 Out of Hay【Kruskal】
- POJ2395最小生成树水
- Android之activity总结
- script 中使用 trap
- GridView 完美填充布局
- 求最长回文子串
- MFC主窗口出现之前弹出子窗口与子窗口交互问题
- poj2395 & poj 1751
- hadoop1.2.1的的简单安装
- Android 设置登录密码必须是数字或者字母并弹出数字键盘
- TimeDate
- hive一行数据中一列拆分成多行
- Ubuntu终端 GIT配色 去掉过去单调的黑底白色
- Minimum Queue with Constant Increment
- jQuery Event.stopPropagation() 函数详解
- 黑马程序员-----多线程