试题查看

首页 > 软件水平考试 > 试题查看
【分析解答题】

【程序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= {{U}} (1) {{/U}}; 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({{U}} (2) {{/U}}) 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({{U}} (3) {{/U}})) 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={{U}} (4) {{/U}})==0){ c=back(&i,color); if(c==0)return cnt; }else{{{U}} (5) {{/U}};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)); }

查看答案解析

参考答案:

正在加载...

答案解析

正在加载...

根据网考网移动考试中心的统计,该试题:

0%的考友选择了A选项

0%的考友选择了B选项

0%的考友选择了C选项

0%的考友选择了D选项

你可能感兴趣的试题

阅读下列说明和数据流图,回答问题1-问题3。【说明】某医院收费系统的主要功能是收阅读以下说明和流程图,回答问题1和问题2。【说明】某供销系统接受顾客的订货单,当有下列关于运动会管理系统的ER图,如图10所示。图中矩形表示实体,圆表示属性,双阅读以下说明和流程图,回答问题1和问题2。【说明】某供销系统接受顾客的订货单,当阅读下列说明和数据流图,回答问题1-问题3。【说明】某医院收费系统的主要功能是收阅读下列说明和数据流图,回答问题1-问题3。【说明】某医院收费系统的主要功能是收