资源简介
已知中国地图,请设计地图着色软件,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色最少。
【提示】
(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封装数据手册
相关资源
- 哈夫曼编码译码实验报告
- 嵌入式多任务实现课程设计
- 基于51单片机的打地鼠游戏
- 基于单片机的节日彩灯控制器设计
- 广工操作系统课程设计文档+代码+可执
- 最新数字电子课程设计电子密码锁的
- 商品货架管理
- 网络工程课程设计报告 网络系统规划
- 数字逻辑课程设计——数字锁
- 武汉大学十套数据结构试题及答案
- 微机原理课程设计--温度测试系统/A
- 数据库课程设计——物业管理系统
- 数据结构课程设计——校园导游
- 南京信息工程大学滨江学院UML课程设
- 51单片机课程设计报告
- 步进电机课程设计
- 网络课程设计,校园网设计方案
- 数电交通灯课程设计附Multisim仿真电路
- 数据结构实验报告---数制转换
- 数据结构火车车厢重排问题
- 微机课程设计简易电子琴报告
- 建立一个带权无向图用邻接矩阵表示
- B样条曲线绘制图案--一个计算机图形
- 天理计算机真题答案
- 汇编语言课程设计 含有许多经典的
- 调频接收机multisim仿真文件,分电路,
- 井字游戏-课程设计
- 统计字符串-课程设计
- 大一课程设计---几何图形
- 数据结构课设——哈夫曼树
评论
共有 条评论