【POJ】[1751]Highways
2016-02-21 01:29
309 查看
貌似是第一次遇到 Special Judge 的题目吧
也就是答案不唯一……嗯……这题或许说答案位置排列不唯一
话说这样的判定程序貌似也挺不容易写的……
这一题数据也只有一组……
本身很简单
就是要求输出连接的坐标
这里我用的Prim的改写
用了一个数组来记录每一条所更新边的两端点
当边值不为0时输出这一条边的两端就好了
[code]#include<stdio.h> #include<math.h> #include<algorithm> using namespace std; struct xy { double x,y; } a[800]; double e[800][800]; int main() { double dis[800]; bool flag[800]; int vs[800]; int N,inf=999999; scanf("%d",&N); for(int i=1; i<=N; i++) { dis[i]=inf; flag[i]=false; } for(int i=1; i<=N; i++) { for(int j=1; j<=N; j++) { e[i][j]=inf; } } for(int i=1; i<=N; i++) scanf("%lf %lf",&a[i].x,&a[i].y); for(int i=1; i<=N; i++) { for(int j=1; j<=N; j++) { if(i==j) continue; else { double l=sqrt(pow(a[i].x-a[j].x,2)+pow(a[i].y-a[j].y,2)); e[i][j]=l; e[j][i]=l; } } } int n; scanf("%d",&n); while(n--) { int u,v; scanf("%d %d",&u,&v); e[u][v]=0; e[v][u]=0; } dis[1]=0; while(true) { int v=-1; for(int u=1; u<=N; u++) { if(!flag[u]&&(v==-1||dis[u]<dis[v])) v=u; } if(v==-1) break; flag[v]=true; if(v!=1&&e[v][vs[v]]!=0&&e[vs[v]][v]!=0) printf("%d %d\n",vs[v],v); for(int u=1; u<=N; u++) { if(dis[u]>e[v][u]) vs[u]=v; dis[u]=min(dis[u],e[v][u]); } } return 0; }
题目地址:【POJ】[1751]Highways
相关文章推荐
- MongoDB javaApi
- iOS打包发布测试版本
- Fibonacci编译错误之思考
- 数据结构(7)—栈的应用之迷宫求解
- Swift基础学习(2)
- Android OS体系结构详解
- Python教程学习简记13--Python Module 模块
- iOS:手把手教你发布代码到CocoaPods(Trunk方式)
- 浅谈12306核心模型设计思路和架构设计
- 如何编写一个CocoaPods的spec文件
- 被AppStore拒绝的N个原因
- react-native 入门资源合集
- 【unity】c# 读写xml_写入xml的两种方式
- OpenGL ES 学习教程(十) Light casters 之 Spot Light (聚光灯)
- uva 10453 Make Palindrome
- 模板渲染引擎手册
- ThinkPHP3.2---excel导入mysql
- java中观察者模式的使用场景
- maven核心,pom.xml详解
- MFC 应用程序调用MFC DLL(里面有对话框)