数据结构地图填色问题Word格式.docx

上传人:b****7 文档编号:22354651 上传时间:2023-02-03 格式:DOCX 页数:19 大小:101.65KB
下载 相关 举报
数据结构地图填色问题Word格式.docx_第1页
第1页 / 共19页
数据结构地图填色问题Word格式.docx_第2页
第2页 / 共19页
数据结构地图填色问题Word格式.docx_第3页
第3页 / 共19页
数据结构地图填色问题Word格式.docx_第4页
第4页 / 共19页
数据结构地图填色问题Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数据结构地图填色问题Word格式.docx

《数据结构地图填色问题Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构地图填色问题Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

数据结构地图填色问题Word格式.docx

//地图行政区域填充的颜色存储数组

longintCount=0;

//统计总共的填色方案个数

(2)本程序主要包含6个函数:

•主函数main()

•创建地图及行政区域的邻接矩阵Create_Graph()

•显示行政区域的邻接矩阵关系Printf_Graph()

•对地图行政区域进行第一次着色Load_Color()

•对地图行政区域进行各种方案着色的显Print_Color()

•判断这个颜色对第n行政区域能不能满足要求Same_Color()

Create_Graph

各函数间调用关系如下:

Printf_Graph

Main()

Load_Color

Same_Color

Print_Color

(3)主函数的伪码

main()

{

定义一个邻接矩阵G;

创建地图及行政区域的邻接矩阵;

显示行政区域的邻接矩阵关系;

对地图进行填充颜色;

改变颜色,显示多种方案;

}

五、详细设计

//-------------------------------邻接矩阵数据类型的定义--------------------------------

#defineMAX_VERTEX_NUM26//最大行政区域个数

//行政区域-顶点向量

//邻接矩阵

//地图当前行政区域个数

/****************************************************************************************

*函数:

*功能:

建立地图的邻接矩阵

*说明:

输入参数Graph*G

本函数很好的完成了地图的创建以及行政区域之间的存储。

在输入错误的时候,会有相应的指示,使得程序更加健壮。

****************************************************************************************/

voidCreate_Graph(Graph*G)//建立地图行政区域的邻接矩阵

输入地图的行政区域的个数G->

vexnum;

输入行政区域,构造行政区域-顶点向量;

初始化邻接矩阵都为0;

构造行政区域邻接矩阵;

输入与V1相邻的行政区域,存放于S数组中;

相邻的行政区域G->

acrs[i][j]=1;

显示地图行政区域的邻接矩阵

输入参数GraphG。

本函数很好的完成了地图行政区域的邻接矩阵的显示

voidPrintf_Graph(GraphG)

构造图形;

横向显示行政区域;

纵向显示行政区域;

显示邻接矩阵;

判断这个颜色对第n行政区域能不能满足要求

输入参数GraphG,intn,

输出0则表示满足,输出1则表示不满足

intSame_Color(GraphG,intn)

Color[n]分别与前面已经着色的几块比较;

相邻并且颜色一样,则不满足;

颜色满足返回0

颜色不满足返回1

对地图行政区域进行第一次着色,始之满足要求

输入参数GraphG,intn

voidLoad_Color(GraphG,intn)

取一种颜色

If(颜色满足,没有与前面冲突)

下一块行政区域着色Load_Color(G,n+1);

Else

尝试另一种颜色

对地图行政区域进行各种方案的显示。

输入参数GraphG,intm

注意:

调用本函数的前提是Color[]数组中有一个正确的填充颜色的方案。

voidPrint_Color(GraphG,intm)

for(i=1;

i<

=4;

i++)

更换颜色,新的颜色不与前面冲突,颜色满足

{

下一个行政区域Print_Color(G,m+1);

直到(到最后一个行政区域,递归出口)

遍历数组Color[],显示所有行政区域颜色,新的方案;

}

/***************************************主函数*******************************************/

Voidmain()

创建地图及行政区域的邻接矩阵;

显示行政区域的邻接矩阵关系;

对地图进行填充颜色;

六、测试结果

七、参考文献

《数据结构》

八、附录

#include<

stdio.h>

math.h>

stdlib.h>

string.h>

/*数据结构期末综合实验*/

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//题目:

地图填色问题~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//地图当前行政区域个数

voidCreate_Graph(Graph*G)//建立地图行政区域的邻接矩阵

inti,j,k,t;

//变量的定义

chars[MAX_VERTEX_NUM];

//暂时存放与某一行政区域相邻的行政区域

chartemp[MAX_VERTEX_NUM];

//临时数组

charV1,V2;

//相邻的两个行政区域的顶点向量

Start:

G->

vexnum=0;

//初始化,总的行政区域个数为0

printf("

输入地图的行政区域的个数(不超过26个):

\t"

);

scanf("

%d"

&

G->

vexnum);

gets(temp);

if(G->

vexnum<

1||G->

vexnum>

27)//输入的数值不在0~26之间重新开始

gotoStart;

for(i=0;

vexnum;

i++)//构造行政区域-顶点向量

New_Input:

for(t=0;

t<

MAX_VERTEX_NUM;

t++)//清空temp数组

temp[t]=NULL;

printf("

请输入第%d个行政区域(用a~z单字符表示):

"

i+1);

scanf("

%c"

&

vexs[i]);

gets(temp);

if(G->

vexs[i]>

'

z'

||G->

vexs[i]<

a'

{//输入的单字符不符合,重新输入

printf("

输入的单字符不符合,重新输入\n"

gotoNew_Input;

}

if(strlen(temp)>

0)//输入的不为单字符,重新输入

{

输入的不为单字符,重新输入\n"

i;

t++)//检测当前输入的行政区域与之前有没有冲突,有冲突,重新输入

if(G->

vexs[i]==G->

vexs[t])

{

printf("

输入的行政区域之前已经输入过,重新输入\n"

gotoNew_Input;

}

}

i++)//初始化邻接矩阵

for(j=0;

j<

j++)

G->

acrs[i][j]=0;

//都为0

for(k=0;

k<

k++)//构造行政区域邻接矩阵

New_Inputs:

请输入与%c相邻的行政区域,已有相邻行政区域有:

G->

vexs[k]);

for(t=0;

vexnum;

t++)//显示与Mg->

vexs[k]已经相邻的行政区域

{

acrs[k][t]==1)

%c"

G->

vexs[t]);

}printf("

\n"

V1=G->

vexs[k];

//V1行政区域

i=k;

//确定v1在G->

vexs中的位置为i

t++)//清空S数组

s[t]=NULL;

t=0;

while(t<

vexnum)//输入与V1相邻的行政区域,存放于S数组中

{

scanf("

s[t]);

if(s[0]=='

\n'

)break;

//没有的话就直接跳出

if(getchar()=='

t++;

}

t++)//确定行政区域V1与其相邻的行政区域的关系,遍历数组S[]

if(s[t]!

=NULL&

&

s[t]!

='

V2=s[t];

//V2行政区域

for(j=0;

vexs[j]!

=V2;

j++);

//确定v2在G中的位置为j

if(j>

vexnum)//输入的元素不正确则显示错误,要求重新输入

{

printf("

输入有误,请重新输入\n"

gotoNew_Inputs;

}

if(V1!

=V2)//输入的相邻行政区域与本身不相同

G->

acrs[i][j]=G->

acrs[j][i]=1;

//置《v1,v2》的对称弧《v2,v1》

inti,j;

地图的邻接矩阵表示,相邻的用1表示\n"

);

|"

//构造图形

G.vexnum;

i++)//横向显示行政区域

G.vexs[i]);

G.vexnum*4+3;

i++)//显示相应长度的-

-"

%c|"

//纵向显示行政区域

printf("

%d"

G.acrs[i][j]);

//显示邻接矩阵

//_________________________________________________________________________________________________

//地图行政区域填充的颜色存储数组

//统计总共的填色方案个数

intSame_Color(GraphG,intn)

inti;

n;

i++)//分别与前面已经着色的几块比较

if(G.acrs[n][i]==1&

Color[i]==Color[n])//相邻并且颜色一样,则不满足

return1;

//与前面颜色有冲突,返回1,表示该颜色不满足

return0;

//没有冲突,该颜色满足,返回0

if(n>

=G.vexnum)//递归出口

}else

for(i=1;

Color[n]=i;

//存储颜色

if(Same_Color(G,n)==0)//颜色满足,没有与前面冲突

Load_Color(G,n+1);

//下一块行政区域

break;

inti=0,j=0;

i++)//尝试更换颜色

Color[m]=i;

if(Same_Color(G,m)==0)//新的颜色不与前面冲突,颜色满足

{

if(m==G.vexnum-1)//到最后一个行政区域,递归出口

j++)//遍历数组Color[],显示所有行政区域颜色,新的方案!

{

switch(Color[j])

case1:

printf("

%c区域填红色,"

G.vexs[j]);

break;

case2:

%c区域填黄色,"

case3:

%c区域填蓝色,"

case4:

%c区域填绿色,"

}

Count++;

//方案加1

}else

Print_Color(G,m+1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1