给定一个图的邻接矩阵和一个正整数n找到两个顶点之间长度为n的路径数,我不知道如何转换为编程?
答案 0 :(得分:1)
拿A ^ n然后阅读相应的条目。
如果您希望单个顶点更有效,请从第一个顶点开始进行n次迭代的随机游走。
答案 1 :(得分:1)
我假设这是家庭作业,所以这里有一个暗示。如果给你一个铅笔和一张纸,以及一个小的邻接矩阵,你如何计算路径的数量?
答案 2 :(得分:0)
这是我的编码,但我不知道如何找到两个顶点之间的长度路径数。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
void main()
{
int x;
int y;
int n;
int l;
int a;
int b;
int length;
char vertex='a';
int num[50][50];
printf("enter the number of vertices : ");
scanf("%d",&n);
//int num[n][n];
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
{
printf("[%c,%c] : ",vertex+x,vertex+y);
scanf("%d",&num[x][y]);
}
}
printf("\n");
printf("Adjacency matrix :\n");
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
printf("%d\t",num[x][y]);
printf("\n");
}
printf("Enter a positive integer for length: ");
scanf("%d",&length);
length=sqrt(length);
printf("Multiplication matrix :\n");
for(l=0;l<=length;l++)
{
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
num[x][y]=(num[x][y])*(num[y][x]);
num[x][y]= num[x][y]+ num[y][x];
}
}
printf("\n");
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
printf("%d\t",num[x][y]);
printf("\n");
}
printf("\nPlease insert your starting point: ");
scanf("%d",&a);
printf("\nPlease insert your ending point: ");
scanf("%d",&b);
a=x-1;
b=y-1;
//printf("\nThe number of path from %d to %d: %d",a,b,num[a][b]);
printf("\nThe number of path from %d to %d: %d",a,b,num[a][b]);
getch();
//return 0;
}
答案 3 :(得分:0)
如何使用Dijkstra的最短路径算法(DSPA)?让网络中每个弧的成本为1.使用DSPA找到两个不同顶点之间的距离。如果长度为n,则表示您已找到感兴趣的路径。遍历所有顶点对。