2022年王道数据结构考研复习指导习题代码(图)_2022王道图课后习题…(2022王道真题解析)

6.3图的遍历 2.试设计一个算法否则返回false。

#include <cstdio>
#include <cstring>

#define maxvertexnum 100

typedef char vertextype;
typedef int edgetype;
typedef struct {
vertextype vex[maxvertexnum][maxvertexnum];
edgetype edge[maxvertexnum][maxvertexnum];
int vexnum, arcnum;
} mgraph;

bool visited[maxvertexnum];

int getindex(mgraph &g, char *s)
{
for (int i 0; i < g.vexnum; i) {

if (strcmp(s, g.vex[i]) 0)
return i;
}
return -1;
}

void creategraph(mgraph &g)
{
scanf(, &g.vexnum, &g.arcnum);
for (int i 0; i < g.vexnum; i)
scanf(, g.vex[i]);
for (int i 0; i < g.vexnum; i)
for (int j 0; j < g.vexnum; j)
g.edge[i][j] 0;
char a[5], b[5];
int k 0, u, v;
while (k < g.arcnum) {
scanf(, a, b);
u getindex(g, a);
v getindex(g, b);
g.edge[u][v] 1;
g.edge[v][u] 1;
k;
}
}

void printgraph(mgraph g)
{
for (int i 0; i < g.vexnum; i) {
for (int j -1; j < g.vexnum; j) {
printf(, g.edge[i][j]);
}
printf();
}
}

void visit(int n)
{
printf(, n);
}

int firstneighbor(mgraph g, int v)
{
for (int i 0; i < g.vexnum; i)
if (g.edge[v][i] 1) return i;
return -1;
}

int nextneighbor(mgraph g, int v, int w)
{
for (int i w 1; i < g.vexnum; i)
if (g.edge[v][i] 1) return i;
return -1;
}

void dfs(mgraph &g, int v, int &vnum, int &enum, bool *visited)
{
visited[v] true;
vnum;
int w firstneighbor(g, v);
while (w ! -1) {
enum;
if (!visited[w])
dfs(g, w, vnum, enum, visited);
w nextneighbor(g, v, w);
}
}

bool istree(mgraph &g)
{
for (int i 1; i < g.vexnum; i) visited[i] false;
int vnum 0, enum 0;
dfs(g, 1, vnum, enum, visited);
if (vnum g.vexnum && enum 2 * (g.vexnum - 1)) return true;
else return false;
}

int main()
{
mgraph g;
creategraph(g);
printgraph(g);
if (istree(g)) printf();
else printf();
return 0;
}

/*
8 7
v1 v2 v3 v4 v5 v6 v7 v8
v1 v2
v1 v3
v2 v4
v2 v5
v3 v6
v3 v7
v5 v8
*/

评论