运动行人检测的数据集呢
时间: 2023-10-11 17:12:00 浏览: 15
好的,这个问题是关于编程的,我可以回答。以下是一个C语言程序,用于输出无向连通图的深度优先生成树:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
// 邻接表结构体
typedef struct ArcNode {
int adjvex; // 邻接点编号
struct ArcNode *nextarc; // 指向下一个邻接点
} ArcNode;
typedef struct VNode {
int data; // 顶点信息
ArcNode *firstarc; // 指向第一个邻接点
} VNode, AdjList[MAX_VERTEX_NUM];
// 图结构体
typedef struct {
AdjList vertices; // 邻接表
int vexnum, arcnum; // 顶点数和边数
} ALGraph;
// 初始化邻接表
void InitALGraph(ALGraph *G) {
int i;
for (i = 0; i < G->vexnum; i++) {
G->vertices[i].data = i; // 顶点编号从0开始
G->vertices[i].firstarc = NULL;
}
}
// 创建无向图的邻接表
void CreateALGraph(ALGraph *G) {
int i, j, k, w;
ArcNode *p;
printf("请输入顶点数和边数:\n");
scanf("%d%d", &G->vexnum, &G->arcnum);
InitALGraph(G);
printf("请输入每个顶点的信息:\n");
for (i = 0; i < G->vexnum; i++) {
scanf("%d", &G->vertices[i].data);
}
printf("请输入每条边的两个顶点序号:\n");
for (k = 0; k < G->arcnum; k++) {
scanf("%d%d", &i, &j);
// 添加邻接点
p = (ArcNode *)malloc(sizeof(ArcNode));
p->adjvex = j;
p->nextarc = G->vertices[i].firstarc;
G->vertices[i].firstarc = p;
p = (ArcNode *)malloc(sizeof(ArcNode));
p->adjvex = i;
p->nextarc = G->vertices[j].firstarc;
G->vertices[j].firstarc = p;
}
}
// DFS遍历图
void DFS(ALGraph *G, int v, int visited[], int *cnt) {
ArcNode *p;
visited[v] = 1;
printf("%d ", G->vertices[v].data); // 访问顶点
// 遍历v的邻接点
for (p = G->vertices[v].firstarc; p != NULL; p = p->nextarc) {
if (!visited[p->adjvex]) {
(*cnt)++;
DFS(G, p->adjvex, visited, cnt);
}
}
}
// 输出深度优先生成树
void DFSTree(ALGraph *G) {
int visited[MAX_VERTEX_NUM] = {0}; // 记录节点是否已被访问
int cnt = 1; // 记录生成树中的边数
int i;
// 从第一个顶点开始遍历
DFS(G, 0, visited, &cnt);
// 如果生成树的边数不等于顶点数-1,则图不连通
if (cnt != G->vexnum - 1) {
printf("\n生成树不存在,图不连通!\n");
return;
}
printf("\n");
}
int main() {
ALGraph G;
CreateALGraph(&G);
DFSTree(&G);
return 0;
}
```
希望这个程序对你有帮助!