工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1263|回复: 7

再发一条高程的下午题给大家磨磨刀

[复制链接]
发表于 2003-8-26 23:04 | 显示全部楼层 |阅读模式
(2001年下午试题5)
阅读下列程序说明和C代码,将应填入____(n)____处的字句写在答题纸的对应栏内。
[程序说明]
著名的四色定理指出任何平面区域图均可用四种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过四种颜色的着色方案。
程序中用1~4表示四种颜色。要着色的N个区域用0~N-1编号,区域相邻关系用adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域j相邻;矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color的值为区域i所着颜色。
[程序]
#include  <stdio.h>
#define  N  10
void  output (int color [] ) / * 输出一种着色方案 * /
{  int  i;
   for (i=0;i<N;i++);
     printf (“%4d” ;color)
   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 adj[][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 = -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));
}
发表于 2003-8-27 07:29 | 显示全部楼层
一点不懂,请师兄点拨一下,小弟是新生,看什么书入门快些,应该怎么学?
回复

使用道具 举报

 楼主| 发表于 2003-8-27 07:34 | 显示全部楼层
你想学哪方面的东西啊,这个论坛有很多高手的,有什么问题可以提出来大家讨论讨论。
回复

使用道具 举报

发表于 2003-8-27 07:44 | 显示全部楼层
小弟之前发贴问过了,可是没有人回,你能帮帮忙吗,谢谢
回复

使用道具 举报

 楼主| 发表于 2003-8-27 07:47 | 显示全部楼层
发来看看,你重新开个贴
回复

使用道具 举报

发表于 2003-8-27 07:49 | 显示全部楼层
https://www.gdutbbs.com/dispbbs.asp?boardID=28&ID=55
就是这个贴,我想知道我学网络工程到底要学什么,编程应该要学,学到什么程度,你认为学什么语言好,有好书推荐吗?
回复

使用道具 举报

发表于 2003-10-28 02:28 | 显示全部楼层
不懂!
走人!
回复

使用道具 举报

发表于 2004-1-8 01:48 | 显示全部楼层
我还要去再看书~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-14 07:49

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表