1.给定无向连通图,假定所有节点权值为1,求从起点0到终点6的最短路径。
2.代码:
#include<iostream>
#include<queue>
using namespace std;
//函数声明
const int N = 7;
int ShortRode(int DataArray[N][N]);
//计算最短路径条数
int ShortRode(int DataArray[N][N])
{
int step[N];
int StepNum[N];
memset(step, 0, sizeof(int)*N);
memset(step, 0, sizeof(int)*N);
StepNum[0] = 1;
queue<int> q;
q.push(0);
int from, i, s;
while (!q.empty())
{
from = q.front();
s = step[from] + 1;
q.pop();
//0是起点,从节点1开始开始遍历
for (i = 1; i < N; i++)
{
if (DataArray[from][i] == 1)
{
//找出
if (step[i] == 0 || step[i] > s)
{
step[i] = s;
StepNum[i] = StepNum[from];
q.push(i);
}
//相同步数则路径数加一
else if (step[i] == s)
{
StepNum[i] += StepNum[from];
}
}
}
}
return StepNum[N-1];
}
//主函数
int main()
{
int D[N][N];
memset(D, 0, sizeof(int)*N*N);
D[0][1] = D[0][2] = 1;
D[1][0] = D[1][3] = 1;
D[2][0] = D[2][3] = 1;
D[3][1] = D[3][2] = D[3][4] = D[3][5] = 1;
D[4][3] = D[4][6] = 1;
D[5][3] = D[5][6] = 1;
D[6][4] = D[6][5] = 1;
cout<<"起点到终点的最近路径有"<< ShortRode(D)<<"条"<< endl;
return 0;
}
3.结果:
起点到终点的最近路径有4条
请按任意键继续. . .