广度优先搜索算法可以得到从已知源点到每个可达顶点的最短距离,此时的最短距离指的是路径上边的个数最少,使用parent数组记录当前顶点的父节点,比如parent[u] = v表示u的父节点为v。最短路径的长度记录在d数组中,比如d[v] = 3表示从源点(s)到v的最短路径为3。最后我们使用showPath()函数把最短路径输出。#include<iostream> #include<fstream> #include<vector> #include<algorithm> #include<queue> using namespace std; vector<vector<int>> mGraph;//图结构 int nodeNum;//图中顶点数 int edgeNum;//图中边数 int *colour;//-1:表示该节点未被访问 0:表示该节点被发现,它的邻接点没有被访问完 1:该节点的邻接点被访问完 int *parent;//当前节点的父节点(由那个节点发现) int *d;//源点到该节点的最短距离 void readGraph() { fstream fin("E:\\algData\\data01.txt");//打开文件 fin>>nodeNum>>edgeNum;//读取顶点数和边数 mGraph.resize(nodeNum);//设置图的大小 colour = new int[nodeNum]; parent = new int[nodeNum]; d = new int[nodeNum]; int num1, num2; while(fin>>num1>>num2)//读取每一条边 { mGraph[num1].push_back(num2);//存储边的信息 mGraph[num2].push_back(num1); }
广度优先搜索之最短路径
最新推荐文章于 2024-03-09 14:07:59 发布