资源简介
已知中国地图,请设计地图着色软件,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色最少。
【提示】
(1) 数据结构的设计:地图可以采用图的数据结构,每个省为一个节点,边表示对应的两个省相邻。
(2) 算法设计:设计着色算法,保证邻接点不是同一种颜色。
(3) 地图数据的输入采取从文件中读取。
(4) 结果输出方式可以采用图形方式或文本方式。

代码片段和文件信息
#include
#include
#define MAXedg 100
#define MAX 0
#define N 4 //着色的颜色数
int color[30]={0};//来存储对应块的对应颜色
typedef char vextype;
typedef int adjtype;
typedef struct //定义图
{
vextype vexs[MAXedg]; //存放边的矩阵
adjtype arcs[MAXedg][MAXedg]; //图的邻接矩阵
int vnumarcnum; //图的顶点数和边数
}Graph;
//***********************************************************
int LocateVex(Graph Gchar u)
{
int i;
for(i=1;i<=G.vnum;i++)
{
if(u==G.vexs[i])
return i;
}
if(i==G.vnum)
{
printf(“Error u!\n“);
exit(1);
}
return 0;
}
//**********************************************************
void CreateGraph(Graph &G) //输入图
{
int ijk w;
vextype v1v2;
printf(“输入图的顶点数和边数:\n“);
scanf(“%d%d“&G.vnum&G.arcnum);
getchar();
printf(“输入图的各顶点:\n“);
for(i=1;i<=G.vnum;i++)
{
scanf(“%c“&G.vexs[i]);
getchar();
}
for(i=0;i<=G.vnum;i++)
for(j=0;j<=G.vnum;j++)
G.arcs[i][j]=MAX;
printf(“输入边的两个顶点和权值(均用1表示):\n“);
for(k=0;k {
scanf(“%c“ &v1);getchar();
scanf(“%c“ &v2);getchar();
scanf(“%d“ &w); getchar();
i=LocateVex(Gv1);
j=LocateVex(Gv2);
G.arcs[i][j]=w;
G.arcs[j][i]=w;
}
}
//****************************************************************
void PrintGraph(Graph G) //输出图的信息
{
int ij;
printf(“图的各顶点:\n“);
for(i=1;i<=G.vnum;i++)
printf(“%c “G.vexs[i]);
printf(“\n“);
printf(“图的邻接矩阵:\n“);
for(i=1;i<=G.vnum;i++)
{
for(j=1;j<=G.vnum;j++)
printf(“%d “G.arcs[i][j]);
printf(“\n“);
}
}
//******************************************************************
int colorsame(int sGraph G)//判断这个颜色能不能满足要求
{
int iflag=0;
for(i=1;i<=s-1;i++)//分别于前面已经着色的几块比较
if(G.arcs[i][s]==1&&color[i]==color[s])
{flag=1;break;}
return flag;
}
//******************************************************************
void output(Graph G)//输出函数
{
int i;
for(i=1;i<=G.vnum;i++)
printf(“%d “color[i]);
printf(“\n“);
}
//******************************************************************
void trycolor(int sGraph G)//s为开始图色的顶点,本算法从1开始
{
int i;
if(s>G.vnum)//递归出口
{
output(G);
exit(1);
}
else
{
for(i=1;i<=N;i++)//对每一种色彩逐个测试
{
color[s]=i;
if(colorsame(sG)==0)
trycolor(s+1G);//进行下一块的着色
}
}
}
//*****************************************************************
int main()
{
Graph G;
CreateGraph(G);
PrintGraph(G);
printf(“着色方案:\n“);
trycolor(1G);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11710 2010-09-08 15:49 地图着色\测试图.png
文件 5324 2009-05-03 13:16 地图着色\流程图.png
文件 2812 2009-04-29 15:16 地图着色\地图着色.cpp
文件 77824 2010-09-08 16:16 地图着色\作业2.doc
文件 6833 2010-09-08 16:10 地图着色\示意图.png
目录 0 2010-09-08 15:50 地图着色
----------- --------- ---------- ----- ----
104503 6
- 上一篇:STC12C5A60S2简单的AD转换程序
- 下一篇:FMC封装数据手册
相关资源
- FTP课程设计(服务端+客户端)
- 数据结构年终考题范围和答案 耿国华
- 高频电子线路课程设计报告收音机
- 直流稳压电源的课程设计、安装及调
- EDA课程设计_密码锁
- 数据结构 朱战力 习题解答 数据结构
- 单片机课程设计 篮球计分器
- 数据结构课程设计 6 1 彩票系统
- 端口扫描课程设计详细的报告
- 教学计划编制系统
- 步进电机课程设计(个人设计)
- 校园网络规划与设计课程设计
- 大数(链表、数组)实现
- 编译原理课程设计:词法语法编译器
-
simuli
nk 课程设计 qpsk - 武汉理工大学 单片机课程设计 16*16点
- 数据库VFP课程设计
- 分页系统模拟实验 操作系统 课程设
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 模拟段页式虚拟存储管理中地址转换
- 硬件课程设计—流水灯(quartus软件
- 超市收银系统eclipse access大学课程设计
- 航空订票系统_数据结构课程设计
- c 课程设计 职工信息管理系统
- 汇编语言,课程设计,红绿灯
- 机床液压系统课程设计卧式钻床动力
- 多项式求和(数据结构C 版)
- 尚观培训linux董亮老师关于数据结构的
- 课程设计蔬菜大棚自动控制系统,包
评论
共有 条评论