2021-11-07 输出无向图第k个顶点的第1邻接点

【问题描述】

  给定一个无向图,编程输出该图第k个顶点的第1邻接点。

  图的顶点个数n大于等于3,小于等于50,输入时顶点编号用整数1~n表示;相邻顶点按照编号从小到大的顺序。

【输入形式】

先从标准输入中输入图的顶点个数和边的个数,两整数之间以一个空格分隔,然后从下一行开始分行输入每条边的信息(用边两端的顶点编号表示一条边,以一个空格分隔顶点编号,边的输入次序和每条边两端顶点编号的输入次序可以是任意的,但边不会重复输入),最后在新的一行上输入第k个顶点编号。

如下图:5个顶点6条边

【样例输入】

5 6

1 2

1 4

2 3

2 5

3 4

3 5

5

【样例输出】

2

【样例说明】

输入的无向图共有5个顶点,6条边(如图所示),需求第5个顶点的第一邻接点。

输出结果为2.

【运行结果如下】

【代码如下】

#include<stdio.h> 
#define MVNum  40	//最大顶点个数  

//------图的的数组(邻接矩阵)存储表示------ 
typedef struct {
	int vexs[MVNum];		//顶点向量
	int	arcs[MVNum][MVNum];	//邻接矩阵
	int visited[MVNum];		//访问标志数组
	int	vexnum;				//顶点数
	int arcnum;		 		//弧数
}MGraph;
int LocateVex(MGraph &G,int v)
{
	for (int i = 0; i < G.vexnum; i++) 
		if (G.vexs[i] == v)	return i;
	return -1;
}
void CreateUDG(MGraph &G)
{
	//构造无向图G 
	int i, j, k;
	int v1, v2; 
	scanf("%d %d",&G.vexnum,&G.arcnum);	//顶点总数和弧总数
	for (i = 0; i < G.vexnum; i++){
		G.vexs[i] = i+1;		//构造顶点向量	
		G.visited[i] = 0;	//初始化标记数组 
	}
	for (i = 0; i < G.vexnum; i++)//初始化邻接矩阵 
		for (j = 0; j < G.vexnum; j++)	
			G.arcs[i][j] = 0;			
	for (k = 0; k < G.arcnum; k++){//构造邻接矩阵
		scanf("%d %d",&v1,&v2);
		i = LocateVex(G,v1);
		j = LocateVex(G,v2);
		G.arcs[i][j] = 1;
		G.arcs[j][i] = 1;
	}//for
}
int FirstAdjVex(MGraph G, int v)
{
	for(int j = 0 ; j < G.vexnum; j++)
		if(G.arcs[v][j] == 1 && G.visited[j] == false)	
			return j;
	return -1;
}

int main()
{
	int vex;
	MGraph G; 
	CreateUDG(G);
	scanf("%d",&vex);	//输入第k个顶点
	printf("%d\n",FirstAdjVex(G,vex-1)+1);
	return 0;
}

本文章仅供学习和参考!

欢迎交流~ 

Guess you like

Origin blog.csdn.net/m0_58489132/article/details/121191136