图结构的认识

图结构
什么是图结构?
图结构是由点、边(和权)组成,点是图中的顶点;边是顶点之间连成的线段;(权是边所代表的值,当然,这个值并不是就是说线段的长度)。图按方向性又可以分为有向图和无向图
应该注意的是顶点的度,顶点的度是连接一个顶点的边的数量,在有向图和无向图中顶点的度有很大的区别,在无向图中,顶点的度就是连接顶点边的数量,而在有向图中,由于线段具有方向性,顶点的度分为入度和出度,顶点的度是入度和出度的和。
图结构中还有比较特殊的结构,比如完全图,完全图是两两顶点之间具有连接关系,完全图可分为有向完全图和无向完全图,有向完全图边的数量为N(N-1),无向完全图边的数量为N(N-1)/2
在用代码实现图的遍历时,一般用到三个数组a[ ],b[ ][ ],book[ ],a[ ]用来保存顶点信息,b[ ][ ]用来保存边的权,book[ ]用来标记
//可以从下题感悟一下
一个环由n个圆组成。把自然数1,2,…,n分别放入每个圆中,两个相邻圆中的数之和应为素数。 注:第一个圆的数目应始终为1。

Input
n(0<n<20)
Output
输出格式如下所示。每一行代表环中从1开始的一系列圈数。数字顺序必须满足上述要求。按字典顺序打印解决方案。 在每个案例后打印一个空行。
在这里插入图片描述

Sample Input**
6
8
Sample Output
Case 1:
1 4 3 2 5 6
1 6 5 2 3 4

Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2

#include<stdio.h>
#include<string.h>
int a[22],b[22];
int N;
int su(int q)
{	
	int i; 
	for(i=2;i<q;i++){
		if(q%i==0)
		break;
	}
	if(i==q)
	return 1;
	else 
	return 0;
}
void digui(int ru)
{
	if(ru==N&&su(a[N-1]+1))
	{
		printf("1 ");
		for(int i=1;i<N-1;i++)
		printf("%d ",a[i]);
		printf("%d",a[N-1]);
		printf("\n");
		return;
	}
	for(int i=2;i<=N;i++){
		if(b[i]==0&&su(a[ru-1]+i))
		{
			a[ru]=i;
			b[i]=1;
			digui(ru+1);
			b[i]=0;
		}
	}
}
int main()
{
	int n=0;
	while(~scanf("%d",&N))
	{
		memset(b,0,sizeof b);
		printf("Case %d:\n",++n);
		a[0]=1;
		b[1]=1;
		digui(1);
		printf("\n");
	}
}
ZL0
发布了15 篇原创文章 · 获赞 0 · 访问量 223

猜你喜欢

转载自blog.csdn.net/ZL0_bo/article/details/105138962