用C++实现,求有向图中任意两个结点间的所有路径.其中图的存储结构为邻接矩阵.程序要带注释.
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/07 16:52:00
用C++实现,求有向图中任意两个结点间的所有路径.其中图的存储结构为邻接矩阵.程序要带注释.
其中图中的顶点为1-35.邻接矩阵是这样的:
其中图中的顶点为1-35.邻接矩阵是这样的:
wait a minute 要所有路径?还是最短路径?
再问: 所有路径,好的,非常感谢。
再答: 求所有路径的意义是什么??图很大的话这路径有很多条的啊
你要求的是任意两点之间的最短距离吧?
再问: 因为我这个图中有1—35,共35个结点,我想求从结点1到其它各点的所有路径。
再答: 这里的所有路径,都是最短路径吧?邻接矩阵读取的是边的权重还是单纯的是否有边?
能不能把linjiejuzhen.txt的大概内容描述一下?举个简单的例子也可以
再问: 不是的,比如从结点1到结点34,根据邻接矩阵,是有很多路径的。
再答: void PrintPath(int record[], int ed) {
\x09if (record[ed] != ed) {
\x09\x09PrintPath(record, record[ed]);
\x09\x09cout << " -> ";
\x09}
\x09cout << ed;
}
void PrintAllPathHelper(const MGraph& G, int st, int ed, int record[]) {
\x09if (ed == st) {
\x09\x09PrintPath(record, ed);
\x09}
\x09for (int i = 1; i < G.numVertexes; i++) {
\x09\x09if (G.arc[st][i] > 0 && record[i] == -1) {
\x09\x09\x09record[i] = st;
\x09\x09\x09PrintAllPathHelper(G, i, ed, record);
\x09\x09\x09record[i] = -1;
\x09\x09}
\x09}
}
void PrintAllPath(const MGraph& G, int st, int ed) {
\x09int record[MAXVEX];
\x09for (int i = 1; i < G.numVertexes; i++) {
\x09\x09record[i] = -1;
\x09}
\x09record[st] = st;
\x09PrintAllPathHelper(G, st, ed, record);
}
再问: 能不能改一下程序,使每两条路径之间有一个换行符,谢谢。
再答: void PrintPath(int record[], int ed) {
if (record[ed] != ed) {
PrintPath(record, record[ed]);
cout << " -> ";
}
cout << ed;
}
void PrintAllPathHelper(const MGraph& G, int st, int ed, int record[]) {
if (ed == st) {
PrintPath(record, ed);
cout << endl;
}
for (int i = 1; i < G.numVertexes; i++) {
if (G.arc[st][i] > 0 && record[i] == -1) {
record[i] = st;
PrintAllPathHelper(G, i, ed, record);
record[i] = -1;
}
}
}
void PrintAllPath(const MGraph& G, int st, int ed) {
int record[MAXVEX];
for (int i = 1; i < G.numVertexes; i++) {
record[i] = -1;
}
record[st] = st;
PrintAllPathHelper(G, st, ed, record);
}
再问: 所有路径,好的,非常感谢。
再答: 求所有路径的意义是什么??图很大的话这路径有很多条的啊
你要求的是任意两点之间的最短距离吧?
再问: 因为我这个图中有1—35,共35个结点,我想求从结点1到其它各点的所有路径。
再答: 这里的所有路径,都是最短路径吧?邻接矩阵读取的是边的权重还是单纯的是否有边?
能不能把linjiejuzhen.txt的大概内容描述一下?举个简单的例子也可以
再问: 不是的,比如从结点1到结点34,根据邻接矩阵,是有很多路径的。
再答: void PrintPath(int record[], int ed) {
\x09if (record[ed] != ed) {
\x09\x09PrintPath(record, record[ed]);
\x09\x09cout << " -> ";
\x09}
\x09cout << ed;
}
void PrintAllPathHelper(const MGraph& G, int st, int ed, int record[]) {
\x09if (ed == st) {
\x09\x09PrintPath(record, ed);
\x09}
\x09for (int i = 1; i < G.numVertexes; i++) {
\x09\x09if (G.arc[st][i] > 0 && record[i] == -1) {
\x09\x09\x09record[i] = st;
\x09\x09\x09PrintAllPathHelper(G, i, ed, record);
\x09\x09\x09record[i] = -1;
\x09\x09}
\x09}
}
void PrintAllPath(const MGraph& G, int st, int ed) {
\x09int record[MAXVEX];
\x09for (int i = 1; i < G.numVertexes; i++) {
\x09\x09record[i] = -1;
\x09}
\x09record[st] = st;
\x09PrintAllPathHelper(G, st, ed, record);
}
再问: 能不能改一下程序,使每两条路径之间有一个换行符,谢谢。
再答: void PrintPath(int record[], int ed) {
if (record[ed] != ed) {
PrintPath(record, record[ed]);
cout << " -> ";
}
cout << ed;
}
void PrintAllPathHelper(const MGraph& G, int st, int ed, int record[]) {
if (ed == st) {
PrintPath(record, ed);
cout << endl;
}
for (int i = 1; i < G.numVertexes; i++) {
if (G.arc[st][i] > 0 && record[i] == -1) {
record[i] = st;
PrintAllPathHelper(G, i, ed, record);
record[i] = -1;
}
}
}
void PrintAllPath(const MGraph& G, int st, int ed) {
int record[MAXVEX];
for (int i = 1; i < G.numVertexes; i++) {
record[i] = -1;
}
record[st] = st;
PrintAllPathHelper(G, st, ed, record);
}
用C++实现,求有向图中任意两个结点间的所有路径.其中图的存储结构为邻接矩阵.程序要带注释.
数据结构利用邻接矩阵存储结构怎样求图中两个顶点之间的所有路径?
在拓扑排序中,对有向图的存储,为什么要把邻接矩阵转化为邻接表
创建一个无向图,元素为整型,以邻接矩阵为存储结构,输出该图的深度化先搜索序列,求连通分量的个数
已知带权有向图如图所示,画出该图的邻接矩阵存储结构.
在线急求熟悉图的两种常用的存储结构,邻接矩阵和邻接表.
求数据结构算法,已知有m个顶点的无向图,采用邻接矩阵结构储存,写出下列算法
请问在数据很多的情况下,怎样用matlab求有向图的带权邻接矩阵?急,
1.给出一个无向图的邻接矩阵,输出各个顶点的度,要程序!
设一个包含N个顶点、E条边的简单有向图采用邻接矩阵存储结构(矩阵元素A[i][j]等于1/0分别表示顶点i与顶点j之间有
1、参考某城市交通图(设该图中有6个城市),以邻接矩阵或邻接表存储该图,要求图中每一个城市的结点除了包含城市名称以外,还
1.具有12个结点的二叉树的二叉链表存储结构中,空链域NULL的个数为( ) A.11 B.13 C.23 D.25