201609-4交通规划 不知道错哪了

 1 #include <string.h>
 2 #include<cstdio>
 3 #include<stdio.h>
 4 #include <iostream>
 5 #include<string>
 6 using namespace std;
 7 int ll[1001][1001];
 8 struct node
 9 {
10     int per;
11     int sumlen;
12     bool vis;
13     node() :per(0), sumlen(0),vis(0) {};
14 };
15 node dd[1001];
16 int dijikstra(int s,int n)
17 {
18     int i,sum = 0,j, min,count=0;
19     while (count < n-1)
20     {
21         min = 1 << 30;
22         dd[s].vis = 1;//s为每次可能替换成的前驱
23         for (i = 1; i <= n; i++)
24         {
25             if (ll[s][i]>0&& !dd[i].vis)//次节点的前驱可修改
26             {
27                 if (!dd[i].per)//没有前驱
28                 {
29                     dd[i].per = s;
30                     dd[i].sumlen += ll[s][i]+dd[s].sumlen;
31                 }
32                 else//已有前驱 判断是否变动
33                 {
34                     if (dd[i].sumlen > dd[s].sumlen + ll[i][s])
35                     {
36                         dd[i].per = s;
37                         dd[i].sumlen = dd[s].sumlen + ll[i][s];
38                     }
39                     else if (dd[i].sumlen == dd[s].sumlen + ll[i][s])//注意我们要求的是最短公路
40                     {
41                         if (ll[i][dd[i].per] > ll[i][s])
42                         {
43                             dd[i].per = s;
44                             dd[i].sumlen = dd[s].sumlen + ll[i][s];
45                         }
46                     }
47                 }
48             }
49             if (!dd[i].vis&&dd[i].sumlen&&min >=dd[i].sumlen)//min记录每次最短公路
50             {
51                 if (min == dd[i].sumlen)
52                 {
53                     if (ll[dd[j].per][j] > ll[dd[i].per][i])
54                     {
55                         min = dd[i].sumlen;
56                         j = i;
57                     }
58                 }
59                 else
60                 {
61                     min = dd[i].sumlen;
62                     j = i;
63                 }
64             }
65         }
66         s = j;
67         sum += ll[dd[j].per][j];
68         count++;
69     }
70     return sum;
71 }
72 int main()
73 {
74     memset(ll,-1,sizeof(ll));
75     int n, m; cin >> n >> m;
76     //n = 4; m = 5;
77     int i, a, b, c;
78     for (i = 1; i <= n; i++)
79         ll[i][i] = 0;
80     for (i = 0; i < m; i++)
81     {
82         cin >> a >> b >> c;
83         ll[a][b] = ll[b][a] = c;
84     }
85     /*ll[1][2] = ll[2][1] = 4;
86     ll[1][3] = ll[3][1] = 5;
87     ll[2][3] = ll[3][2] = 2;
88     ll[2][4] = ll[4][2] = 3;
89     ll[3][4] = ll[4][3] = 2;*/
90     cout << dijikstra(1, n) << endl;
91     return 0;
92 }
时间: 2024-10-01 02:50:40

201609-4交通规划 不知道错哪了的相关文章

交通规划

交通规划 发布时间: 2015年10月10日 18:05   时间限制: 2000ms   内存限制: 256M 描述 调查某城镇交通状况,得到城镇道路统计表,表中列出了每条道路直接连通的城镇.要使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可).问最少还需要建设多少条道路? 输入 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M(<2000):随后的M行对应M条道路,每行给出一对正整数,

TransCAD 交通规划软件

1.TransCAD概述 TransCAD是第一个也是唯一的一个专供交通专业人员使用而设计的地理信息系统(GIS),用来储存.显示.管理和分析交通数据.TransCAD把GIS和交通模型的功能组合成一个单独的平台,以提供其他软件无法与之匹敌的各种功能.TransCAD可用于所有交通模式,任何地理尺寸和不同详细程度的交通运输模型. 2.软件特色 TransCAD在微软视窗操作系统的计算机上运行,支持几乎所有桌面计算系统的标准.这有两个好处: 和其他GIS与交通结合的模型系统相比,获得和安装Tran

CCF201609-4 交通规划

问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统. 建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成高速铁路.现在,请你为G国国王提供一个方案,将现有的一部分铁路改造成高速铁路,使得任何两个城市间都可以通过高速铁路到达,而且从所有城市乘坐高速铁路到首都的最短路程和原来一样长.请你告诉G国国王在这些条件下最少要改造多长的铁路. 输入格式 输入的第一行包含两个整数n, m,分别表示G国城市的数量和城市间铁路的数

CCF_201612-4_交通规划

http://115.28.138.223/view.page?gpid=T44 好像也没想象中的那么难,没办法,当初连个优先队列dij都不会写= = 在优先队列dij算法上加上相等的时候的处理就可以了. #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> #include<queue> using nam

帮看下代码不知道错哪里了

5bbgae瀑脚咽断勤锥<http://weibo.com/p20180414Pp/230927983196089798631424> uotjju纫任屏良慌盟<http://weibo.com/p/230927983017083530907648?kV90_20180414> mzo6ds卧榷弊咆胃撞<http://weibo.com/XAhtap/230927983178004857360384> q6uu2l叹共滴帜屎肺<http://weibo.com/2

【CCF】交通规划 Dijstra变形 优先级队列重载

[题意] 给定一个无向图,求这个图满足所有点到顶点的最短路径不变的最小生成树 [AC] 注意双向边要开2*maxm 注意优先级队列 #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<vector> #include<queue> using namespace std; in

第10章 智能交通

10.1智能交通概述 10.1.1传统交通与智能交通   10.1.2智能交通的定义 智能交通在世界各地迅速推进,已成为现代交通的重要标志,然而,对于这个专用名词,国际上至今没有一个明确的定义.在美.欧.日的ITS推进组织的网页或有关资料中,我们看到分别有如下的叙述. “美国智能运输协会”(ITS America网址为型:i!望:Q蟹):ITS是由一些技术组成的,这些技术包括信息处理.通信.控制和电子技术.交通事故.拥挤使我们为生活.为损失的 生产率和浪费的能源付出了昂贵的代价.ITS可以通过新

交通灯 并查集

Problem Description 相信交通灯对于你来说并不陌生,交通灯分为红色和绿色两个阶段,这两个阶段互相更替,保障着道路的安全. 在杭州一共有n个路口,编号依次为1到n.这些路口之间连接着m条双向道路,每条道路连接着两个不同的路口,且任意两个路口之间最多连接着一条道路.每条道路中央都设置着一个交通灯. 为了保障道路的安全,对于任意两条道路,如果它们连接了同一个路口,那么它们不能同色. 你的朋友正乘着飞机从杭州的上空飞过,并拍了一张杭州的照片.在照片里,每条道路的交通灯的颜色都清晰可辨.

TransModeler 交通仿真软件

1.系统概述 TransModeler是美国Caliper公司开发的一个功能强大而操作灵活的交通仿真软件包,广泛适用于各类交通规划和交通仿真建模任务.TransModeler独特之处在于它提供了宏观/中观/微观的混合仿真功能.高保真度的微观仿真能够在同一网络上的不论什么路段与中观和宏观仿真混合使用. TransModeler能够模拟从快速公路到城区路网各种类型的道路交通网络. TransModeler能够具体逼真地分析大范围多种出行方式的交通流,能够在二维或三维地理信息系统环境中,将交通流的状况