#include <iostream> #include <bits/stdc++.h> using namespace std; #define Maxsize 60 typedef struct { int num;//点数 int from;//开始的点 int graph[Maxsize][Maxsize];//图 int path[Maxsize][Maxsize];//最短路径 } Graph; void Creatgraph(Graph &G)//建表 { cin >> G.num; cin >> G.from; for(int i = 0; i < G.num; i++) { for(int j = 0; j < G.num; j++) { cin >> G.graph[i][j]; if(G.graph[i][j] != 0) G.path[i][j] = G.graph[i][j]; else G.path[i][j] = 999999; } } } void Find(Graph &G) { for(int k = 0;k < G.num;k++) { for(int i = 0; i < G.num; i++) { for(int j = 0; j < G.num; j++) { if(G.path[i][k] + G.path[k][j] < G.path[i][j]) G.path[i][j] = G.path[i][k] + G.path[k][j]; } } } for(int l = 0;l < G.num;l++) { if(l == G.from) continue; if(G.path[G.from][l] < 999999) cout << G.path[G.from][l] << ' '; else cout << -1 << ' '; } cout << endl; } void Look(Graph G) { cout << "*--------*--------*" << endl; for(int i = 0; i < G.num; i++) { for(int j = 0; j < G.num; j++) { cout << G.path[i][j] << ' '; } cout << endl; } } int main() { Graph G; Creatgraph(G); Find(G); //Look(G); return 0; }解释说明
时间: 2024-04-02 18:35:39 浏览: 50
这是一个用于求解有向图最短路径的程序,使用了 Floyd 算法。具体实现过程如下:
1. 定义了一个结构体 Graph,其中包含有 num(点数)、from(开始的点)、graph(原始图)和 path(最短路径)四个成员变量。
2. 通过 Creatgraph 函数来创建图,其中从输入流中获取了 num、from 和 graph 的值。在创建过程中,将 graph 数组中为 0 的位置赋值为一个较大的数(这里是 999999),表示这两个点之间没有连通。
3. 通过 Find 函数来求解最短路径。采用了 Floyd 算法,首先对 path 数组进行初始化,然后依次枚举每一个点,通过比较当前点经过中转点 k 到达终点的路径长度与直接到达终点的路径长度的大小,更新 path 数组中两个点之间的最短路径长度。
4. 最后通过 Look 函数可以查看 path 数组中存储的每两个点之间的最短路径长度。
5. 在 main 函数中,首先创建了一个 Graph 类型的对象 G,然后调用 Creatgraph 函数来创建图,并且调用 Find 函数来求解最短路径。最后程序返回 0。
相关问题
顺序表插入操作 #include<iostream> using namespace std; #
顺序表插入操作是指在顺序表的第i个位置插入元素e,并将原来位于第i个位置及其之后的元素都后移一个位置。具体实现可以使用一个循环将第i个位置及其之后的元素后移,然后将元素e插入到第i个位置。以下是一个C++实现的示例代码:
```
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int datatype;
typedef struct {
datatype *elem;
int length;
} SqList;
int ListInsert_Sq(SqList &L, int i, datatype e) {
if ((i < 1) || (i > L.length + 1)) {
return ERROR;
}
if (L.length >= MAXSIZE) {
return ERROR;
}
for (int j = L.length; j >= i; j--) {
L.elem[j] = L.elem[j - 1];
}
L.elem[i - 1] = e;
L.length++;
return OK;
}
```
--相关问题--:
bits/stdc++.h和iostream的区别
根据提供的引用内容,bits/stdc++.h是一个C++标准库的头文件,包含了所有标准库的头文件,因此可以方便地使用各种STL容器和算法。而iostream是C++标准库中的一个头文件,主要用于输入输出流操作,例如cin和cout。
bits/stdc++.h和iostream的区别在于,bits/stdc++.h包含了所有标准库的头文件,而iostream只包含了输入输出流操作相关的头文件。因此,如果需要使用STL容器和算法,可以使用bits/stdc++.h,如果只需要进行输入输出流操作,可以使用iostream。
举个例子,如果需要使用vector容器,可以使用bits/stdc++.h:
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
return 0;
}
```
如果只需要进行输入输出流操作,可以使用iostream:
```cpp
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << "a + b = " << a + b << endl;
return 0;
}
```
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![cpp](https://img-home.csdnimg.cn/images/20250102104920.png)
![text/plain](https://img-home.csdnimg.cn/images/20250102104920.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![text/plain](https://img-home.csdnimg.cn/images/20250102104920.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)