#include<bits/stdc++.h> using namespace std; int s[10],dis[10],path[10],maps[15][15],nums,end; int dijkstra(int x) { int min=100,flag=0; for(int i=1;i<=nums;i++) { if(s[i]!=1&&maps[x][i]!='*') { if(dis[x]+maps[x][i]<dis[i]) { dis[i]=dis[x]+maps[x][i]; path[i]=x; } if(maps[x][i]<min) { min=maps[x][i]; flag=i; } } } path[flag]=x; dis[flag]=dis[x]+maps[x][flag]; s[x]=1; if(flag!=end) dijkstra(flag); } int main() { int star,m; cin>>star>>end>>nums; for(int i=1;i<=nums;i++) for(int j=1;j<=nums;i++) cin>>maps[i][j]; memset(s,INT_MAX,sizeof(int)); dijkstra(star); m=end; cout<<"<-"<<end; while(m!=star) { m=path[m]; cout<<"<-"<<m; } cout<<"<-"<<star; } ysm问题
时间: 2024-01-01 07:05:45 浏览: 112
万能头文件#include&amp;lt;bits/stdc++.h&amp;gt; using namespace std;
这段代码是实现Dijkstra算法的,用于求解有向带权图中单源最短路径问题。 代码中变量含义如下:
- s数组:用于记录节点是否已经被访问过,1表示已访问。
- dis数组:用于记录源节点到各个节点的最短距离。
- path数组:用于记录最短路径上各个节点的前驱节点。
- maps数组:存储有向带权图的邻接矩阵。
- nums变量:表示有向带权图的节点数。
- star变量:表示源节点。
- end变量:表示目标节点。
你还有其他问题吗?
阅读全文