数据结构-源程序.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构-源程序

#includeiostream #includestack #includefstream using namespace std; const int MaxNum=100000; class Graph {private: int *Adj;//保存邻接矩阵的一维数组j和k之间权值存储在Adj[j*Num+k]中 int Num;//当前顶点数 public: Graph();//构造函数 ~Graph();//析沟函数 void Dijkstra(int start);//单元最短路径算法 }; Graph::Graph()//构造函数 { ifstream input(input.txt,ios::in); if(input==NULL)coutopen error!\n; if(input!=NULL) { inputNum; Adj=new int[Num*Num]; if(Adj==NULL)exit(0); for(int i=0;iNum;i++) for(int j=0;jNum;j++) { inputAdj[i*Num+j]; if(Adj[i*Num+j]==-1) Adj[i*Num+j]=MaxNum; } } } Graph::~Graph()//析构函数 { delete[]Adj; } void Graph::Dijkstra(int start)//单元最短路径算法 { int*dist=new int[Num];//记录最短权值 int*prev=new int[Num];//记录路径 int*s=new int[Num];//s为已经确定好的顶点域 int i,j,k,m;//j记录dist的下标 m=start; for(i=0;iNum;i++)//初始化 { dist[i]=Adj[m*Num+i]; prev[i]=m;//记录源点到顶点的最短路径上,本顶点的前一顶点 s[i]=0;//顶点i不在s域中 } prev[m]=-1;//m是源点前一顶点不存在 s[m]=1;//源点在s域中 for(i=0;iNum-1;i++)//差Num-1个顶点需处理 { int min;//最小权 for(k=0;kNum;k++) if(!s[k])break;//找到仍在顶点-S域中的第一个顶点 min=dist[k]; j=k; for(k=j+1;kNum;k++)//找最小权值的边 if(!s[k]dist[k]min) { min=dist[k]; j=k; } s[j]=1;//放进s域中 for(k=0;kNum;k++)//更新最短路径值 if(!s[k]dist[j]+Adj[j*Num+k]dist[k]) { dist[k]=dist[j]+Adj[j*Num+k];//记录最短路径 prev[k]=j;//记录路径即本顶点k的前驱顶点j }} ofstream output(output.txt,ios::out); if(output==NULL)exit(0); for(k=0;kNum;k++)//输出打印 if(k!=m) { if(dist[k]=MaxNum) { output源点start到顶点k不存在相通的路径endlendl;} else {output源点start到顶点k的最小花费为:dist[k]endl;//输出最小权值 j=k; stackintQ; output路径为:; while(j!=m){Q.push(j);j=prev[j];}//路径存入栈中 Q.push(j); while(Q.size()!=1){outputQ.top()--;Q.pop();}//输出路径 outputQ.top()endlendl;Q.pop();//最后一个元素出栈 }}} int main() {Graph G; cout请输入起点:endl; int start; cinstart; G.Dijkstra(start); getchar(); getchar(); return 0;} #include stdio.h #define N 7 /* 顶点数目 */ #define I 999 /* 表示无穷大 */ int graph[N][N] = { /* 图的邻接矩阵 */ {I, 4, 5, 8, I, I, I},

文档评论(0)

tianma2015 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档