图的最短路径-升级版
来源:互联网 发布:淘宝虚拟发布类目 编辑:程序博客网 时间:2024/05/01 00:35
//这个版本使用了huilu数组存放这个点的前一个合理点;
//while( no_s(v-1,s) )//当所求的点不在s中,这语句严格来说是求点(v-1)这个点到始点的路径
//for(i=0;i<v;++i)//这条语句能求所有点的最短路径
//前两句也适应前版本
///粘贴输入下列
4 4
0 1 1
0 3 1
0 2 3
//while( no_s(v-1,s) )//当所求的点不在s中,这语句严格来说是求点(v-1)这个点到始点的路径
//for(i=0;i<v;++i)//这条语句能求所有点的最短路径
//前两句也适应前版本
///粘贴输入下列
4 4
0 1 1
0 3 1
0 2 3
2 3 4
#include <iostream>using namespace std;//012345分别表示v0 v1...... int v;//////点数目 int edge;///边数目 int si=0;//si用来控制s数组的位置int** draw();//绘图int no_s_l_min(int* s,int* l);//不在s数组中的l数组中最小的点int no_s(int k,int* s);//不在s数组中的void digui_shuchu(int k,int *huilu);//递归输出int main(int argc, char const *argv[]){ int i; int**a=draw();//------------------------------------------------------------------------// int* s=new int[v];//存放ok了的标记,si用来控制s数组的位置 for ( i = 0; i < v; ++i)s[i]=32767;//------------------------------------------------------------------------// int* l=new int[v];//存放i点到0点的路径长度 for ( i = 0; i < v; ++i)l[i]=32767;//------------------------------------------------------------------------// int* huilu=new int[v];//存放i点的前一个合理点 for ( i = 0; i < v; ++i)huilu[i]=-1;//------------------------------------------------------------------------//l[0]=0; int u;//不属于s的并且l【u】最小的一个顶点 huilu[0]=0;//------------------------------------------------------------------------// while( no_s(v-1,s) )//当所求的点不在s中 { u=no_s_l_min(s,l); s[si++]=u; for ( i = 0; i < v; ++i) { if (no_s(i,s) && a[u][i]<32767 && i!=u) { if (l[u]+a[u][i] < l[i])//lenth和路径将会改变 {/////////////////////////////////////////更换i的所有数据 l[i]=l[u]+a[u][i]; huilu[i]=u; } } } }//------------------------------------------------------------------------// cout<<"0"; digui_shuchu(v-1,huilu); return 0;}int** draw()//绘图{ int i,j; cin>>v>>edge;///输入点数目和边数目 int **a=new int*[v]; for ( i = 0; i < v; ++i) a[i]=new int[v]; for ( i = 0; i < v; ++i) for ( j = 0; j < v; ++j) a[i][j]=32767; int spot1,spot2,len; for ( i = 0; i < edge; ++i) { cin>>spot1>>spot2>>len; a[spot1][spot2]=len; a[spot2][spot1]=len; }///-------------------------------------------------------------/// for ( i = 0; i < v; ++i){ for ( j = 0; j < v; ++j) cout<<a[i][j]<<" "; cout<<"\n"; } cout<<"\n"; return a;}int no_s_l_min(int* s,int *l)//不再s数组中的l数组中最小的点{ int mark=0; int min; for (int i = 0; i < v; ++i) { if(no_s(i,s) )//不在s数组里的点vi { if(mark==0){min=i;mark=1;}//必然会执行一次,初始化min else { if (l[min] > l[i]) min=i; } } } return min;//返回Vmin;}int no_s(int k,int* s){ for (int i = 0; i <= si; ++i) if(s[i]==k)return 0;//点vk不再s[i]中 return 1;}void digui_shuchu(int k,int *huilu){ if (k!=0) { digui_shuchu(huilu[k],huilu); cout<<k; } else return;}
0 0
- 图的最短路径-升级版
- 图的最短路径
- 图的最短路径
- 图的最短路径
- 图的最短路径
- 图的最短路径
- 图@ 最短路径
- 图---最短路径
- 图 - 最短路径
- 图的最短路径的问题
- 十二、图的遍历--(4)最短路径简化版
- 图:求图的最短路径
- 关于图的最短路径
- 数据结构---->图的最短路径
- 图的最短路径dijkstra算法
- 图的最短路径搜索
- 有向图的最短路径
- 图的最短路径算法
- ORACLE物化视图--物化视图日志如何避免系统时间变化带来的影响
- Android性能优化笔记
- windows store apps开发使用SQLite-net 查询语句中文乱码问题
- 冬季的一缕阳光从指尖悄悄滑过
- 软件开发模型(II)
- 图的最短路径-升级版
- 学习鸟哥的Linux私房菜笔记(4)——文件
- 《linux性能及调优指南》 3.3 内存瓶颈
- Delphi6中使用TADOConnection和TADQuery组件连接访问数据库总结
- Contents & Index
- iOS开发-mutating method sent to immutable object错误
- 程序员面试精粹01
- Ubuntu 12.04下安装QT 4.0
- Java加载jar文件并调用jar文件当中有参数和返回值的方法