图结构
什么是图结构?
图结构是由点、边(和权)组成,点是图中的顶点;边是顶点之间连成的线段;(权是边所代表的值,当然,这个值并不是就是说线段的长度)。图按方向性又可以分为有向图和无向图
应该注意的是顶点的度,顶点的度是连接一个顶点的边的数量,在有向图和无向图中顶点的度有很大的区别,在无向图中,顶点的度就是连接顶点边的数量,而在有向图中,由于线段具有方向性,顶点的度分为入度和出度,顶点的度是入度和出度的和。
图结构中还有比较特殊的结构,比如完全图,完全图是两两顶点之间具有连接关系,完全图可分为有向完全图和无向完全图,有向完全图边的数量为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");
}
}