1 课程设计报告 课程设计题目:地图着色问题 专 业 :x x x x x x x x x 班 级 :x x x x x x x x x 姓 名 :x x x x x x x x x 2 一:需求分析: 1) 已知中国地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少; 2) 将各省进行编号,然后利用无向图个顶点之间的边来表示各省的相邻关系; 3) 演示程序以用户和计算机的对话方式进行; 4) 最后对结果做出简单分析。 二:概要设计 一:设计思路 把34个省看成34个顶点,从选定的第一个顶点开始着色,先试第一种颜色,如果这个颜色与这个顶点的其他邻接顶点的颜色不重复,则这个顶点就是用这种颜色,程序开始对下一个顶点着色;如果着色重复,则使用下一种颜色重复上面的操作。着色过程就是一个递归的过程,直到所有的顶点都处理完后结束着色。 二:数据结构设计 因为这个程序是对图的操作,所以程序采用的逻辑结构是图状,存储结构选用邻接表,考虑用邻接表是因为一般的地图的某一个顶点并不会与很多的顶点相邻接,如果用邻接矩阵会浪费很多的存储空间,所以我选择的邻接表来存储。 其中: typedef struct ArcNode { int x; (表示与当前顶点所表示省份相邻的省份的位置信息) struct ArcNode *next; (指向下一个弧结点) }ArcNode; (表示省份之间相邻关系的弧结点) typedef struct { char *name; (顶点所表示的省份的名称) int color; (省份的颜色,用数字表示不同的颜色) ArcNode *firstnext; (指向第一个弧) }shengfen[35]; 3 三:详细设计 该程序一共包含三个模版:分别为初始化模版、着色模版和输出模版。 1 .初始化模块 声明表示省份的顶点信息、省份之间相邻关系的弧的信息,并为其赋值。 2 .着色模块 为各个省份着色。 for(i=1;i<=34;i++) { sheng[i].color=0; } for(i=1;i<=34;i++) { j=1; p=sheng[i].firstnext; while(p!=NULL) { while(p!=NULL&&j!=sheng[p->x].color) { p=p->next; } if(p!=NULL) j++; } sheng[i].color=j; } 3 .输出模块 输出各个省份的颜色信息。 for(i=1;i<=34;i++) { printf("%s:",sheng[i].name); printf("%d\n",sheng[i].color); } printf("/n0 表示白色,1 表示蓝色,2 表示红色,3 表示绿色,4 表示黄色"); return 0; 4 四:调试分析 因为我们的程序已知是中国地图,为中国地图染色,所以程序没...