测试样例

请输入图顶点个数!
6
请输入连通的两个点,以输入0 0结束!
1 2
1 3
2 4
5 6
6 3
4 3
0 0
你输入的图为:
0 1 1 0 0 0
1 0 0 1 0 0
1 0 0 1 0 1
0 1 1 0 0 0
0 0 0 0 0 1
0 0 1 0 1 0
请输入你的操作类型:
        退出 0
        图的边数 1
        任何两个顶点是否相连 2
        求一个顶点的度是多少 3
1
图的边数为: 6
请输入你的操作类型:
        退出 0
        图的边数 1
        任何两个顶点是否相连 2
        求一个顶点的度是多少 3
2
请输入两个顶点的位置!
1 3
顶点1与顶点3相连!
请输入你的操作类型:
        退出 0
        图的边数 1
        任何两个顶点是否相连 2
        求一个顶点的度是多少 3
2
请输入两个顶点的位置!
1 6
顶点1与顶点6不相连!
请输入你的操作类型:
        退出 0
        图的边数 1
        任何两个顶点是否相连 2
        求一个顶点的度是多少 3
3
请输入顶点:
3
顶点3的度为:3
请输入你的操作类型:
        退出 0
        图的边数 1
        任何两个顶点是否相连 2
        求一个顶点的度是多少 3
0
Press any key to continue

代码如下
#include<stdio.h>
#include
<stdlib.h>
typedef 
struct ArcNode
{
    
int adjves;
    
//int weight;
    struct ArcNode * nextarc;
}
ArcNode;
typedef 
struct
{
    
int data;
    ArcNode firstarc;
}
AdjList;
typedef 
struct
{
    AdjList 
*vertices;
    
int vexnum, arcnum;
}
ALGraph;
ALGraph alg;
int str[100][100= {0};
/////////////////////////////////////
void initail();//初始化邻接表 
void insert(int i, int j);//向邻接表插入一条边 
void printAlg();//打印邻接表 
void DfsTraverseALG(int i);//深优遍历 
void DfsALG(int i, int *visit);///深优遍历主体 
void printMgraph();//打印矩阵 
int Arcs(int i);//求某个顶点的度 
bool isArc(intint);//某两个点是否相连 
int getArcnumOfGraph();//获得图的边数 
int main()
{
    
int i, j, k;
    scanf(
"%d"&(alg.vexnum));
    initail();
    
while (1)
    
{
        printf(
"->");
        scanf(
"%d%d"&i, &j);//按题意输入的点序号都大于0 
        if (i == 0 && j == 0)
        
{
            
break;
        }

        insert( i,  j);
    }

    printAlg();
    printf(
"DfsTraverseALG:\n");
    DfsTraverseALG(
1);
    printf(
"请输入你的操作类型:\n");
    printf(
"退出 0\n");
    printf(
"图的边数 1\n");
    printf(
"任何两个顶点是否相连 2\n");
    printf(
"求一个顶点的度是多少 3\n");
    
while (1)
    
{
        scanf(
"%d"&k);
        
if (k == 0)
        
{
            
break;
        }

        
else if (k == 1)
        
{
            printf(
"图的边数为:%d\n", getArcnumOfGraph());
        }

        
else if (k == 2)
        
{
            printf(
"请输入两个顶点的位置!\n");
            scanf(
"%d%d"&i, &j);
            
if (isArc(i - 1, j))
            
{
                printf(
"顶点%d与顶点%d相连!\n", i, j);
            }

            
else
            
{
                printf(
"顶点%d与顶点%d不相连!\n", i, j);
            }

        }

        
else if (k == 3)
        
{
            printf(
"请输入顶点:\n");
            scanf(
"%d"&i);
            printf(
"顶点%d的度为:%d\n",i, Arcs(i - 1));
        }

        
else
        
{
            printf(
"输入错误,请重新输入\n");
        }

    }

    system(
"pause");
    
return 0;    
}

void initail()
{
    
int n = alg.vexnum;
    alg.arcnum 
= 0;
    
int i;
    alg.vertices 
= (AdjList*)malloc(n * sizeof(AdjList));
    
for (i = 0; i < n; i++)
    
{
        alg.vertices[i].firstarc.nextarc 
= NULL;
        alg.vertices[i].data 
= i + 1;
    }

}

void insert(int i, int j)
{
    i
--;
    j
--;
    ArcNode 
*p;
    p 
= (ArcNode*)malloc(sizeof(ArcNode));
    p
->adjves = j + 1;
    p
->nextarc = alg.vertices[i].firstarc.nextarc;//复制邻接表顶点的邻接点 
    alg.vertices[i].firstarc.nextarc = p;
    p 
= (ArcNode*)malloc(sizeof(ArcNode));
    p
->adjves = i + 1;
    p
->nextarc = alg.vertices[j].firstarc.nextarc;//复制邻接表顶点的邻接点 
    alg.vertices[j].firstarc.nextarc = p;
    alg.arcnum
++;//边数加一    
}


void printAlg()
{
    
int i;
    ArcNode 
*p;
    
for (i = 0; i < alg.vexnum; i++)
    
{
        printf(
"%d:\t", i + 1);
        p 
= alg.vertices[i].firstarc.nextarc;
        
while (p != NULL)
        
{
            printf(
"%d\t", p->adjves);
            p 
= p->nextarc;
        }

        printf(
"\n");
    }

}


/////////////////////////////////////////////////
void DfsTraverseALG(int i)
{
    
int j, n = alg.vexnum;
    
int *visit = (int*)malloc(alg.vexnum * sizeof(int));
    i
--;
    
for (j = 0; j < alg.vexnum; j++)
    
{
        visit[j] 
= 0;
    }

    
for (j = 0; j < alg.vexnum; j++)
    
{
        
if (visit[j] == 0)
        
{
            DfsALG(i, visit);
        }

    }

    printf(
"\n");
    printMgraph();
//////////////////
    free(visit);
}

void DfsALG(int i, int *visit)
{
    ArcNode 
*p;
    
int j;
    visit[i] 
= 1;
    printf(
"%d\t", alg.vertices[i].data);
    p 
= alg.vertices[i].firstarc.nextarc;
    
while (p != NULL)
    
{
        j 
= p->adjves - 1;
        str[i][j] 
= 1;
        
if (visit[j] == 0)
        
{
            DfsALG(j, visit);
        }

        p 
= p->nextarc;
    }

}

void printMgraph()
{
    
int i, j;
    printf(
"Mgraph:\n");
    
for (i = 0; i < alg.vexnum; i++)
    
{
        
for (j = 0; j < alg.vexnum; j++)
        
{
            printf(
"%d ", str[i][j]);
        }

        printf(
"\n");
    }

}

//////////////////////////////////////////////            

int Arcs(int i)
{
    
int j = 0;
    ArcNode 
*= alg.vertices[i].firstarc.nextarc;
    
while (p != NULL)
    
{
        j
++;
        p 
= p->nextarc;
    }

    
return j;
}

bool isArc(int i, int j)
{
    ArcNode 
*= alg.vertices[i].firstarc.nextarc;
    
while (p != NULL)
    
{
        
if (p->adjves == j)
        
{
            
return true;
        }

        p 
= p->nextarc;
    }

    
return false;
}

int getArcnumOfGraph()
{
    
return alg.arcnum;
}