最短路径条数问题
2016-04-30 11:00
393 查看
最短路径条数问题:
给定如图所示的无向连通图,假定图中所有边的权值都为1,显然,从源点A到终点T的最短路径有多条,求不同的最短路径的数目。
如图:
程序实现:
运行结果:
转载请注明出处:http://www.cnblogs.com/gaobaoru-articles/
给定如图所示的无向连通图,假定图中所有边的权值都为1,显然,从源点A到终点T的最短路径有多条,求不同的最短路径的数目。
如图:
程序实现:
#include <iostream> #include <queue> #include <cstring> using namespace std; const int N = 16; int CalcShortestPathNum(int G ){ int step ;//每个节点可以几步到达 int PathNum ;//到每个节点有几种路径 memset(step,0,sizeof(int)*N); memset(PathNum,0,sizeof(int)*N); PathNum[0] = 1; queue<int> q;//存储当前搜索的节点 q.push(0); while(!q.empty()){ int cur = q.front(); q.pop(); int s=step[cur]+1;//到下一连通节点的步数 for(int i=1;i<N;i++){//0是起点,不需要遍历 if(G[cur][i]==1){//连通 //没有达到或者没有更快的路径 if((step[i]==0)||(step[i]>s)){ step[i] = s; PathNum[i] = PathNum[cur]; q.push(i); } //当发现相同的最短路径时 else if(step[i]==s){ PathNum[i] += PathNum[cur]; } } } } return PathNum[N-1]; } int main() { int G ; memset(G,0,sizeof(int)*N*N); G[0][1] = G[0][4] = 1; G[1][0] = G[1][5] = G[1][2] = 1; G[2][1] = G[2][6] = G[2][3] = 1; G[3][2] = G[3][7] = 1; G[4][0] = G[4][5] = 1; G[5][1] = G[5][4] = G[5][6] = G[5][9] = 1; G[6][2] = G[6][5] = G[6][7] = G[6][10] = 1; G[7][3] = G[7][6] = 1; G[8][9] = G[8][12] = 1; G[9][5] = G[9][8] = G[9][10] = G[9][13] = 1; G[10][6] = G[10][9] = G[10][14] = G[10][11] = 1; G[11][10] = G[11][15] = 1; G[12][8] = G[12][13] = 1; G[13][12] = G[13][9] = G[13][14] = 1; G[14][13] = G[14][10] = G[14][15] = 1; G[15][11] = G[15][14] = 1; cout<<CalcShortestPathNum(G)<<endl; return 0; }
运行结果:
转载请注明出处:http://www.cnblogs.com/gaobaoru-articles/
相关文章推荐
- PHP经典算法计算两个日期的差数
- iOS layout的相关方法
- Hibernate 延迟加载剖析与代理模式应用
- Linux下整合Apache和Tomcat
- fprintf(); fscanf(); 向文件中写入读出数据
- opencv中的cvResize函数,cvSize结构体,IplImage结构体
- 设计模式(十一)代理模式Proxy(结构型)
- HDU 3388 Coprime(容斥原理+二分)
- 深入浅出ES6(十):集合
- HDU 3388 Coprime(容斥原理+二分)
- 设计模式(十一)代理模式Proxy(结构型)
- 如何学习
- 常用的 memcache
- 设计模式(十)享元模式Flyweight(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 另一个ORM——MyBatis(四)
- [vim]vim全局替换
- 剑指offer(56):表示数值的字符串
- 设计模式(十)享元模式Flyweight(结构型)
- 设计模式(九)外观模式Facade(结构型)