#include <iostream> #include <vector> using namespace std; // 定义边结构体 struct Edge { int dest; // 目标顶点 int weight; // 边的权值 Edge(int d, int w): dest(d), weight(w) {} }; // 定义邻接表节点结构体 struct Node { int vertex; // 顶点编号 vector<Edge> edges; // 与该顶点相连的边 Node(int v): vertex(v) {} }; // 邻接表表示法构造无向网G vector<Node> buildGraph() { vector<Node> graph; int numNodes, numEdges; cout << "请输入顶点数和边数:"; cin >> numNodes >> numEdges; graph.resize(numNodes); cout << "请输入每条边的起点、终点和权值:" << endl; for (int i = 0; i < numEdges; ++i) { int start, dest, weight; cin >> start >> dest >> weight; graph[start].edges.emplace_back(dest, weight); graph[dest].edges.emplace_back(start, weight); } return graph; } // 递归地深度优先遍历该图G void dfs(vector<Node>& graph, vector<bool>& visited, int current) { visited[current] = true; cout << current << " "; for (Edge& e : graph[current].edges) { int next = e.dest; if (!visited[next]) { dfs(graph, visited, next); } } } int main() { vector<Node> graph = buildGraph(); vector<bool> visited(graph.size(), false); int start; cout << "请输入起始顶点编号:"; cin >> start; dfs(graph, visited, start); cout << endl; return 0; }运行一下这段代码
时间: 2024-04-22 13:23:05 浏览: 55
当你运行这段代码时,程序会提示你输入顶点数和边数,你需要输入两个整数。然后程序会提示你输入每条边的起点、终点和权值,你需要按照提示输入每条边的起点、终点和权值,其中起点和终点都是整数,权值可以是整数或浮点数。输入完所有边后,程序会要求你输入起始顶点编号,你需要输入一个整数。程序会从该顶点开始递归地深度优先遍历整个图,并输出遍历结果,每个遍历到的顶点编号后面会跟一个空格。最后程序会输出一个换行符,表示遍历结束。
相关问题
#include <iostream> #include <string> #include <vector> using namespace std; // 定义路由表项结构体 struct RouteEntry { string dest; // 目标ip地址 string nextHop; // 下一条路由地址 }; // 定义路由表类 class RouteTable { public: // 添加路由表项 void addEntry(string dest, string nextHop) { RouteEntry entry = { dest, nextHop }; entries.push_back(entry); } // 查找目标ip地址对应的下一条路由地址 string lookup(string dest) { for (int i = 0; i < entries.size(); i++) { if (dest == entries[i].dest) { return entries[i].nextHop; } } return "Not Found"; } private: vector<RouteEntry> entries; // 存储路由表项的向量 }; int main() { RouteTable table; // 添加路由表项 table.addEntry("192.168.1.0/24", "192.168.1.1"); table.addEntry("192.168.2.0/24", "192.168.2.1"); table.addEntry("192.168.3.0/24", "192.168.3.1"); // 查找目标ip地址对应的下一条路由地址 string dest; cout << "Enter destination IP address: "; cin >> dest; string nextHop = table.lookup(dest); cout << "Next hop: " << nextHop << endl; return 0; }该代码用到了哪些函数,这些函数分别是干什么的
该代码用到了以下函数:
1. `RouteTable::addEntry(string dest, string nextHop)`:向路由表中添加一条路由表项,其中 `dest` 为目标 IP 地址,`nextHop` 为下一条路由地址。
2. `RouteTable::lookup(string dest)`:查找目标 IP 地址 `dest` 对应的下一条路由地址。
除此之外,代码还使用了一些标准库函数,例如 `std::cout` 和 `std::cin` 用于输入输出,`std::string` 用于存储字符串,`std::vector` 作为存储路由表项的容器。
用结构体定义图,并给我代码
当然可以!以下是一个用结构体定义图的示例代码:
```c++
#include <iostream>
#include <vector>
struct Edge {
int src;
int dest;
int weight;
};
struct Graph {
int V; // 图的顶点数
std::vector<Edge> edges; // 存储图的边集合
Graph(int v) {
V = v;
}
void addEdge(int src, int dest, int weight) {
Edge edge;
edge.src = src;
edge.dest = dest;
edge.weight = weight;
edges.push_back(edge);
}
};
int main() {
int V = 5; // 图的顶点数
Graph graph(V);
// 添加边
graph.addEdge(0, 1, 10);
graph.addEdge(1, 2, 20);
graph.addEdge(2, 3, 30);
graph.addEdge(3, 4, 40);
graph.addEdge(4, 0, 50);
// 输出图的边
std::cout << "图的边:" << std::endl;
for (const auto& edge : graph.edges) {
std::cout << edge.src << " -> " << edge.dest << ", 权重:" << edge.weight << std::endl;
}
return 0;
}
```
以上代码定义了一个结构体 `Edge`,表示图中的一条边,包括源顶点、目标顶点和权重。另外,定义了结构体 `Graph`,表示一个图,包括顶点数量和边集合。在 `Graph` 中,有一个 `addEdge` 函数用于添加边。在 `main` 函数中,创建了一个具有5个顶点的图,并添加了一些边,然后输出了所有的边。
希望对你有所帮助!如果你还有其他问题,请随时提问。
阅读全文