博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdoj_3665Seaside
阅读量:5122 次
发布时间:2019-06-13

本文共 3034 字,大约阅读时间需要 10 分钟。

Seaside

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 842    Accepted Submission(s): 594


Problem Description
XiaoY is living in a big city, there are N towns in it and some towns near the sea. All these towns are numbered from 0 to N-1 and XiaoY lives in the town numbered ’0’. There are some directed roads connecting them. It is guaranteed that you can reach any town from the town numbered ’0’, but not all towns connect to each other by roads directly, and there is no ring in this city. One day, XiaoY want to go to the seaside, he asks you to help him find out the shortest way.
 

Input
There are several test cases. In each cases the first line contains an integer N (0<=N<=10), indicating the number of the towns. Then followed N blocks of data, in block-i there are two integers, Mi (0<=Mi<=N-1) and Pi, then Mi lines followed. Mi means there are Mi roads beginning with the i-th town. Pi indicates whether the i-th town is near to the sea, Pi=0 means No, Pi=1 means Yes. In next Mi lines, each line contains two integers S
Mi and L
Mi, which means that the distance between the i-th town and the S
Mi town is L
Mi.
 

Output
Each case takes one line, print the shortest length that XiaoY reach seaside.
 

Sample Input
 
5 1 0 1 1 2 0 2 3 3 1 1 1 4 100 0 1 0 1
 

Sample Output
 
2

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#pragma warning(disable : 4996)const int MAXN = 15;const int INF = 999999;int n;int maps[MAXN][MAXN];bool visited[MAXN];int dist[MAXN];void init(){ for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if(i == j) { maps[i][j] = 0; } else { maps[i][j] = INF; } } }}void Dijkstra(int s, int e) //起点,终点{ int i, j; int minValue, minNode; dist[s] = 0; visited[s] = true; for (i = 1; i <= n; i++) { dist[i] = maps[s][i]; } for (i = 1; i <= n; i++) { minValue = INF; minNode = 0; for (j = 1; j <= n; j++) { if(!visited[j] && minValue > dist[j]) { minNode = j; minValue = dist[j]; } } if(minNode == 0) { break; } visited[minNode] = true; for (j = 1; j <= n; j++) { if(!visited[j] && maps[minNode][j] != INF && dist[j] > dist[minNode] + maps[minNode][j]) { dist[j] = dist[minNode] + maps[minNode][j]; } } if(minNode == e) { break; } }}int main(){ freopen("in.txt", "r", stdin); int x, y, a, b, count, ans; int temp[100] = {0}; while (scanf("%d", &n) != EOF) { init(); count = 0; for (int i = 0; i < n; i++) { scanf("%d %d", &x, &y); if(y == 0) { for (int j = 0; j < x; j++) { scanf("%d %d", &a, &b); maps[i+1][a+1] = b; } } else { temp[count++] = i + 1; for (int j = 0; j < x; j++) { scanf("%d %d", &a, &b); maps[i+1][a+1] = b; } } } ans = INF; for (int i = 0; i < count; i++) { memset(visited, false, sizeof(visited)); Dijkstra(1, temp[i]); if(dist[temp[i]] < ans) { ans = dist[temp[i]]; } } printf("%d\n", ans); } return 0;}

转载于:https://www.cnblogs.com/lgh1992314/archive/2013/05/16/5835051.html

你可能感兴趣的文章
使用WinDbg分析死锁
查看>>
基于ssm的poi反射bean实例
查看>>
Xcode快捷键大全
查看>>
【SQL】- 基础知识梳理(八) - 事务与锁
查看>>
一个最简的短信验证码倒计时例子
查看>>
Linus 谈软件开发管理经验
查看>>
easyspider
查看>>
php5.6安装Zend Opcache扩展
查看>>
kubernetes 1.6 集群实践 (八)
查看>>
highcharts折线图的简单使用
查看>>
获取Filter的三种途径 分类: DirectX ...
查看>>
POJ-2955括号匹配问题(区间DP)
查看>>
Jquery获取浏览器窗口和Body长宽
查看>>
c++ 引用
查看>>
IT面试技巧终身受益
查看>>
在Nodejs中如何调用C#的代码
查看>>
Java中的数组
查看>>
TortoiseGit免密码配置
查看>>
eclipse里部署struts2
查看>>
Android 开发 图片网络缓存加载框架Fresco
查看>>