您的位置:首页 > 其它

最短路径条数问题

2016-04-30 11:00 393 查看
最短路径条数问题:

给定如图所示的无向连通图,假定图中所有边的权值都为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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: