Wireshark可以用来查看视频每一帧数据,什么数据开头,包长度怎么定义,怎么读取完整帧。
时间: 2024-06-12 15:03:51 浏览: 14
以下是使用Qt编写的Dijkstra算法邻接链表实现最短路径的示例代码:
首先,需要定义一个结构体来表示图中的每个节点和边:
```cpp
struct Edge {
int dest; // 目标节点
int weight; // 权重
Edge* next; // 下一条边
};
struct Node {
int id; // 节点编号
Edge* edges; // 邻接链表
};
```
然后,可以使用一个数组来存储所有的节点:
```cpp
const int MAX_NODES = 100;
Node nodes[MAX_NODES];
int numNodes = 0;
```
接下来,可以实现Dijkstra算法来计算最短路径。首先,需要定义一个用于存储已访问节点的集合:
```cpp
bool visited[MAX_NODES];
```
然后,可以实现一个函数来找到距离起点最近的未访问节点:
```cpp
int findNearestUnvisitedNode(int* distances) {
int minDist = INT_MAX;
int nearestNode = -1;
for (int i = 0; i < numNodes; i++) {
if (!visited[i] && distances[i] < minDist) {
minDist = distances[i];
nearestNode = i;
}
}
return nearestNode;
}
```
接下来,可以实现Dijkstra算法的主体部分:
```cpp
void dijkstra(int startNode, int* distances, int* prevNodes) {
memset(visited, false, sizeof(visited));
memset(prevNodes, -1, sizeof(int) * numNodes);
for (int i = 0; i < numNodes; i++) {
distances[i] = INT_MAX;
}
distances[startNode] = 0;
while (true) {
int currNode = findNearestUnvisitedNode(distances);
if (currNode == -1) {
break;
}
visited[currNode] = true;
Edge* edge = nodes[currNode].edges;
while (edge != nullptr) {
int destNode = edge->dest;
if (!visited[destNode]) {
int newDist = distances[currNode] + edge->weight;
if (newDist < distances[destNode]) {
distances[destNode] = newDist;
prevNodes[destNode] = currNode;
}
}
edge = edge->next;
}
}
}
```
最后,可以调用该算法来计算起点到终点的最短路径:
```cpp
const int MAX_DISTANCE = INT_MAX / 2;
int distances[MAX_NODES];
int prevNodes[MAX_NODES];
dijkstra(startNode, distances, prevNodes);
if (distances[endNode] == MAX_DISTANCE) {
// 无法到达
} else {
// 计算路径
int currNode = endNode;
QVector<int> path;
while (currNode != -1) {
path.prepend(currNode);
currNode = prevNodes[currNode];
}
}
```
完整的示例代码如下:
```cpp
#include <QtCore>
struct Edge {
int dest;
int weight;
Edge* next;
};
struct Node {
int id;
Edge* edges;
};
const int MAX_NODES = 100;
Node nodes[MAX_NODES];
int numNodes = 0;
bool visited[MAX_NODES];
int findNearestUnvisitedNode(int* distances) {
int minDist = INT_MAX;
int nearestNode = -1;
for (int i = 0; i < numNodes; i++) {
if (!visited[i] && distances[i] < minDist) {
minDist = distances[i];
nearestNode = i;
}
}
return nearestNode;
}
void dijkstra(int startNode, int* distances, int* prevNodes) {
memset(visited, false, sizeof(visited));
memset(prevNodes, -1, sizeof(int) * numNodes);
for (int i = 0; i < numNodes; i++) {
distances[i] = INT_MAX / 2;
}
distances[startNode] = 0;
while (true) {
int currNode = findNearestUnvisitedNode(distances);
if (currNode == -1) {
break;
}
visited[currNode] = true;
Edge* edge = nodes[currNode].edges;
while (edge != nullptr) {
int destNode = edge->dest;
if (!visited[destNode]) {
int newDist = distances[currNode] + edge->weight;
if (newDist < distances[destNode]) {
distances[destNode] = newDist;
prevNodes[destNode] = currNode;
}
}
edge = edge->next;
}
}
}
int main(int argc, char* argv[]) {
QCoreApplication app(argc, argv);
// 构建图
Edge edges1[] = {
{1, 7, nullptr},
{2, 9, nullptr},
{5, 14, nullptr}
};
nodes[0] = {0, edges1};
Edge edges2[] = {
{0, 7, nullptr},
{2, 10, nullptr},
{3, 15, nullptr}
};
nodes[1] = {1, edges2};
Edge edges3[] = {
{0, 9, nullptr},
{1, 10, nullptr},
{3, 11, nullptr},
{5, 2, nullptr}
};
nodes[2] = {2, edges3};
Edge edges4[] = {
{1, 15, nullptr},
{2, 11, nullptr},
{5, 6, nullptr}
};
nodes[3] = {3, edges4};
Edge edges5[] = {
{0, 14, nullptr},
{2, 2, nullptr},
{3, 6, nullptr}
};
nodes[4] = {4, edges5};
Edge edges6[] = {
{0, 9, nullptr},
{3, 6, nullptr},
{4, 6, nullptr}
};
nodes[5] = {5, edges6};
numNodes = 6;
// 计算最短路径
const int MAX_DISTANCE = INT_MAX / 2;
int distances[MAX_NODES];
int prevNodes[MAX_NODES];
dijkstra(0, distances, prevNodes);
// 输出结果
for (int i = 0; i < numNodes; i++) {
qDebug() << "Node" << i << ": distance=" << distances[i] << ", prevNode=" << prevNodes[i];
}
return app.exec();
}
```
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![mp4](https://img-home.csdnimg.cn/images/20210720083504.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)