阅读下列程序说明和C代码,将应填入(n)处。【程序5说明】 著名的四色定理指出任何平面区域图均可用四
阅读下列程序说明和C代码,将应填入(n)处。
【程序5说明】
著名的四色定理指出任何平面区域图均可用四种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过四种颜色的着色方案。
程序中用1~4表示四种颜色。要着色的N个区域用0~N-1编号,区域相邻关系用 adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域j相邻;矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color[i]的值为区域i所着颜色。
【程序5】
include<stdio.h>
define N 10
void output(int color[])/*输出一种着色方案*/
{ int i;
for(i=0;i<N;i++)
printf("%4d",color[i]);
printf("\n");
}
int back (int * ip,int color[])/*回溯*/
{ int c=4;
while(c==4){
if(*ip<=0)return 0;
--(*ip);
c=(1);
color[*ip]=-1;
}
return c;
}
/*检查区域i,对c种颜色的可用性*/
int colorOk(int i,int c,int [][N],int color[]}
{ int j;
for(j=0;j<i;j++)
if((2))
return 0;
return 1;
}
/*为区域i选一种可着的颜色*/
int select (int i,int c,int adj[][N],int color[])
{ int k;
for(k=c;k<=4;k++)
if(colorOK((3)))
return k;
return 0;
}
int coloring(int adj[][N])/*寻找各种着色方案*/
{ int color[N],i,c,cnt;
for(i=0;i<N;i++)color[i] =-1;
i=c=0;cnt=0;
while(1){
if((c=(4))==0){
c=back(&i,color);
if(c==0)return cnt;
}else{(5);i++;
if(i==N){
output(color);
++cnt;
c=back(&i,color);
}else c=0;
}
}
}
void main()
{ int adj[N][N]=
{{0,1,0,1,1,1,1,1,1,1},
{1,0,1,1,0,1,1,1,1,0},
{0,1,0,1,0,1,1,0,1,1},
{1,1,1,0,1,1,0,0,1,1},
{1,0,0,1,0,1,0,0,0,0},
{1,1,1,1,1,0,1,0,0,1},
{1,1,1,0,0,1,0,0,1,0},
{1,1,0,0,0,0,0,0,1,1},
{1,1,1,1,0,0,1,1,0,1},
{1,0,1,1,0,1,0,1,1,0}
};
printf("共有%d组解.\n",coloring(adj));
}
(1)color[*ip](2)adj[i][j]!=0 && color[j]==c (3)i,k,adj,color(4)select(i,c+1,adj,color) (5)color[i]=c 解析:(1)Back()函数将color数组中紧邻*ip位置的,颜色值为 4的一个连续区域的元素赋值为-1。(2)colorOK()判断区域i对其之前的所有区域是否可以着色c。该句是检查i的相邻区域是否已有颜色为c的。(3)这是colorOK的参数列表。Select为区域i选择一种颜色,使用colorok函数对各种颜色(值为c~4的一种,不一定是所有颜色)分别进行检查。(4)Coloring()函数寻找各种着色方案。它先从区域0开始,检查颜色,并着色(着色的顺序总是从小色值的颜色开始的)。当发现某一区域无法着色时,就使用back()函数,将该区域之前的一个连贯区域进行洗色(对应color数组中赋值为-1)并回溯,并从回溯后的位置,重新开始进行颜色检查和赋色,但使用的色值比该位置洗色前的颜色值更大。若所有区域均已着色,则输出该着色方案。然后,使用back函数,重新进行着色。当所有颜色方案均已找到后,函数结束。(5)该句对区域i赋颜色c。c为之前select函数所选出的可以用的颜色。
该网站数据库连接程序conn.inc部分代码如下,请在空白处填入相应的程序代码。 计算机类考试 2020-05-26 …
计算机病毒(Computer Virus,CV)是编制者在计算机程序中插入的,破坏计算机系统功能或者 计算机类考试 2020-05-31 …
VB填空题帮我做做二、填空题(2%*10)1、在VB中通过程序代码设置对象的属性,格式为:对象.属 其他 2020-06-18 …
给加粗字选择正确的解释,把序号填在括号里。甲:①动物身上有保护功能的硬壳;②手指或脚趾上的角质硬壳 语文 2020-07-06 …
如表为某设备维修的工序明细表,其中“紧后工序”是指一个工序完成之后必须进行的下一个工序.工序代号工 数学 2020-07-11 …
请将以下金属材料的冶炼按年代的先后顺序排序(填序号).A.铁B.青铜C.铝从以上顺序可以看出,金属制 化学 2020-11-03 …
请辨认下列五种动物然后回答问题:(1)按照鱼类、两栖类、爬行类、鸟类、哺乳类排序(填代号):.(2) 语文 2020-12-10 …
下图是某种生物细胞的亚显微结构示意图,请据图回答:(“[]”内填序号“”填名称):(1)写出下列序号 语文 2020-12-21 …
根据课文内容,写出下面的句子分别是描写什么手指,把序号填在括号里。A.大拇指B.食指C.中指D.无名 语文 2021-01-17 …
在线求指导:填表.填表.要查的字音序音节在正确的解释后面打“√”精兵简政①简单、简化;②选择;③古代 语文 2021-01-20 …