数据结构 图的应用

  • 格式:pdf
  • 大小:38.04 KB
  • 文档页数:2
C:\Users\TeAmo\Desktop\图未优化.cpp 使用的时候记得改改函数名,变量名啊 不要傻到直接给老师那大家都一样啦 by 徐 #include <iostream> using namespace std; #define INF 32767 #define MaxVex 20 typedef enum {DG,DN,UDG,UDN}GraphKind; bool path[MaxVex][MaxVex]={}; bool final[MaxVex]; int D[MaxVex]={0}; int d[MaxVex]={0}; struct ArcCell{ int adj; int *info; }; struct Graph{ int vexs[MaxVex]; ArcCell arcs[MaxVex][MaxVex]; int vexnum,arcnum; GraphKind kind; }; int getmax(int *d,Graph a) { int result=0; for(int i=0;i<a.vexnum;i++) if(result<d[i])result=d[i]; return result; } int getmin(int *d,Graph a) { int result=d[0]; int i,j; for(i=0;i<a.vexnum;i++) if(result>d[i]){result=d[i];j=i;} return j; } void input(Graph *graph) { int n; cout<<"请输入顶点个数"; cin>>n; graph->vexnum=n; cout<<endl<<"请输入无向图的邻接矩阵,无穷时大请输入-1"; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { cout<<endl<<"arc["<<i<<"]["<<j<<"]="; cin>>graph->arcs[i][j].adj; /* if(i!=j&&!(graph->arcs[i][j].adj||graph->arcs[j][i].adj))cin>>graph->arcs[i][j].adj; else else if(graph->arcs[i][j].adj||graph->arcs[j][i].adj) if(graph->arcs[i][j].adj)graph->arcs[j][i].adj=graph->arcs[i][j].adj; else graph->arcs[i][j].adj=graph->arcs[j][i].adj; */ if(graph->arcs[i][j].adj==-1)graph->arcs[i][j].adj=INF;
2
1

C:\Users\TeAmo\Desktop\图未优化.cpp } } void Dijkstra(Graph G,int v0) { int min,v,w; for(v=0;v<G.vexnum;++v){ final[v]=false; D[v]=G.arcs[v0][v].adj; for(int w=0;w<G.vexnum;++w) path[v][w]=false; if(D[v]<INF){path[v][v0]=true;path[v][v]=true;} }//for D[v0]=0; final[v0]=true; for(int i=1;i<G.vexnum;++i){ min=INF; for(w=0;w<G.vexnum;++w) if(!final[w]) if(D[w]<min){v=w;min=D[w];} final[v]=true; for(w=0;w<G.vexnum;++w) if( !final[w]&&(min+G.arcs[v][w].adj<D[w])){ D[w]=min+G.arcs[v][w].adj; for(int j=0;j<MaxVex;j++)path[w][j]=path[v][j]; path[w][w]=true; }//if }//for }//dij void shortpath(Graph a) { int result; for(int i=0;i<a.vexnum;i++) { Dijkstra(a,i); d[i]=getmax(D,a);//D[i]为始点到第i个点的最短路径 //d[i]为始点为i时到其他各点最短路径中的最长路径; } result=getmin(d,a); Dijkstra(a,result);//getmin(d)为结果,医院位置 for(int j=0;j<a.vexnum;j++) { cout<<endl<<"从医院,即点"<<result+1<<"到点"<<j+1<<"最短距离为"<<D[j]; } void main() { Graph a; input(&a); shortpath(a); }