PKU 1847 最短路径 djistrla
2011-06-02 22:50
295 查看
已经很久没做程序题了,也已经很久没有接触c,c++。这些东西已经忘的差不多了,但为了不让自己彻底忘记掉这些宝贵的知识。今天把上大学时写的一个最短路模版翻出来看下来。我草,这代码确实够烂的,没有注释,完全的面向过程编程,复用性就更不用说了。找了一个pku的最短路径题目试了下模版的正确性,不错,一次AC通过。贴出自己那丑陋的代码,后续再对这个代码动手术。
本想着趁着自己心想不错,再看看其它算法,可是今天有点累了,休息下。找一个自己喜欢的娱乐方式放松下,自己平时不喜欢打网游。空时玩玩小游戏,最近发一个新的小游戏网站做的不错,广告几乎没有,http://www.7k76.com/ ,mark一下,下次闲的时候可以玩玩。
今天把上周写的代码,重先改了下,用了c中的结构体,让程序更好维护。重用性更强。
#include<iostream> #include <stdlib.h> #define INFINITY 30000 #define LENGTH 102 using namespace std; struct { int dist[LENGTH][LENGTH]; } map; int main() { int m,i,j,a,b,cc,dc,le,num,v,v0,min,n; int dist[105][105],d[105]; int p[105][105],final[105]; while(cin>>m) { cin>>a>>b; for(i=1;i<=m;i++) for(j=1;j<=m;j++) {dist[i][j]=INFINITY;dist[j][i]=INFINITY;} for(i=1;i<=m;i++) { cin>>n; for(j=1;j <=n;j++){ cin>>cc; if(j==1){ dist[i][cc] = 0; }else{ dist[i][cc] = 1; } } } v0=a; //初始化 for(i=1;i<=m;i++) { final[i]=false;d[i]=dist[v0][i]; } d[v0]=0;final[v0]=true; for(i=1;i<m;i++) { min=INFINITY; for(j=1;j<=m;j++) if(!final[j]) if(d[j]<min) {v=j;min=d[j];} if(min != INFINITY){ final[v]=true; for(j=1;j<=m;j++) if(!final[j]&&(min+dist[v][j]<d[j])) { d[j]=min+dist[v][j]; } } } if(d[b] == INFINITY){ cout<<"-1"<<endl; }else { cout<<d[b]<<endl; } } return 0; }
本想着趁着自己心想不错,再看看其它算法,可是今天有点累了,休息下。找一个自己喜欢的娱乐方式放松下,自己平时不喜欢打网游。空时玩玩小游戏,最近发一个新的小游戏网站做的不错,广告几乎没有,http://www.7k76.com/ ,mark一下,下次闲的时候可以玩玩。
今天把上周写的代码,重先改了下,用了c中的结构体,让程序更好维护。重用性更强。
#include<iostream> #include <stdlib.h> #define INFINITY 30000 #define LENGTH 102 using namespace std; struct Graip{ int i,j; int dist[LENGTH][LENGTH]; int s[LENGTH]; int d[LENGTH]; int edgeNum; //起始点 int v0; //初始化 void reset(){ for(i=0;i<=edgeNum;i++) for(j=0;j<=edgeNum;j++) {dist[i][j]=INFINITY;dist[j][i]=INFINITY;} }; //最短路径 void dijkstra(){ for(i=0;i<=edgeNum;i++) { s[i]=false;d[i]=dist[v0][i]; } int min,v; d[v0]=0;s[v0]=true; for(i=1;i<edgeNum;i++) { min=INFINITY; for(j=1;j<=edgeNum;j++) if(!s[j]) if(d[j]<min) {v=j;min=d[j];} if(min != INFINITY){ s[v]=true; for(j=1;j<=edgeNum;j++) if(!s[j]&&(min+dist[v][j]<d[j])) { d[j]=min+dist[v][j]; } } } } } map; int main() { int i,j,m,a,b,cc,n; while(cin>>m) { cin>>a>>b; map.edgeNum = m; map.v0=a; map.reset(); for(i=1;i<=m;i++) { cin>>n; for(j=1;j <=n;j++){ cin>>cc; if(j==1){ map.dist[i][cc] = 0; }else{ map.dist[i][cc] = 1; } } } map.dijkstra(); if(map.d[b] == INFINITY){ cout<<"-1"<<endl; }else { cout<<map.d[b]<<endl; } } return 0; }
相关文章推荐
- pku 1847(最短路径,floyd)
- pku 3259(最短路径,spfa)
- pku 1797 Heavy Transportation(最短路径)
- pku 1511 Invitation Cards(最短路径)
- POJ 1847 Tram(Dijkstra单源有向图最短路径算法)
- PKU1125 最短路径 Floyd-Warshall算法
- POJ_1847_Tram(单源最短路径的三种算法实现)
- PKU1062(昂贵的聘礼)单源点最短路径-Dijkstra算法
- pku openjudge 我爱北大 floyd算法求最短路径
- poj1847 - Tram (最短路径问题) (Dijkstra)
- poj 1847 Tram(最短路径)
- Pku acm 1062 昂贵的聘礼 数据结构题目解题报告(七)—单源最短路径:Dijkstra算法
- PKU 1062 单源最短路径
- POJ 1847 Tram (最短路径)
- POJ 1847 Tram (简单最短路径dijkstra-floyd-spfa)
- poj 1847 最短路径基础题目
- pku 1511(最短路径,spfa静态邻接表)
- 完全最短路径问题Floyd算法 pku 1125 Stockbroker Grapevine
- pku 2394(最短路径,dijkastra)
- POJ 1847 最短路径 垃圾水题可是坑爹多case问题初始化的锅