邻接矩阵作为主要存储结构
2012-07-26 17:50
337 查看
行政区划中 每个景点的信息有{编号,城市名字,地理位置}
初步设想是
初步设想是 在字符串数组存放相邻的城市,然后邻接矩阵每一个metro[i][j]可以从第 i 个城市的neighbour[] 查找是否有与第j个城市相同名字的城市。
因为已经有了染色算法,所以我们只要在原有基础上将merto的矩阵获取方式改变一下就好。
首先先输入N个城市编号 名字 地址,之后是neighbour的N元素的数组。
源代码如下:
这样基本上将染色算法和信息输入搞定。
数据结构课设 原文内容要求:设计有效的逻辑数据结构与存储结构表示中国各行政区域的有关信息(如省会城市名,电话区号,人口数,地理位置等)及行政区域间的相邻关系、省会城市间的距离;分析与设计有效的算法对行政区域图进行染色,使每个行政区域染一种颜色且相邻的省份染不同颜色,而总的颜色数最少;另外如在全国省城之间建立通信网,构造费用最低的通信线路铺设方案。
初步设想是
struct city { int num; char name; char location; char neighbour[]; };
初步设想是 在字符串数组存放相邻的城市,然后邻接矩阵每一个metro[i][j]可以从第 i 个城市的neighbour[] 查找是否有与第j个城市相同名字的城市。
因为已经有了染色算法,所以我们只要在原有基础上将merto的矩阵获取方式改变一下就好。
首先先输入N个城市编号 名字 地址,之后是neighbour的N元素的数组。
源代码如下:
#include <stdio.h> #include <stdlib.h> /*定理:任何平面地图可以使用4种颜色给每个不同的城市着色,而保证相邻的城市着不同的颜色。 */ /*思路:把地图上的每个城市抽象为一个点,并给每个城市编号,,相邻的城市之间用直线连接。据此做出邻接矩阵,若第i个城市与第j个城市相邻,则metro[i][j]=1,否则metro[i][j]=0。 */ /*算法:按照编号从小到大的顺序检查每个城市,对每个城市从1到4使用4种颜色着色,若当前颜色可用(即不与相邻城市颜色相同),则着色;否则测试下一种颜色。 */ #define N 5 struct city_Info { int num; char name[20]; char location[20]; int neighbour ; } city ; /*录入各个城市信息*/ /*函数作用:产生城市信息*/ void inputInfo(struct city_Info * city,int city_Num) { city[city_Num].num=city_Num+1; printf("please input the name of %d city \n",city_Num+1); scanf("%s",city[city_Num].name); printf("please input the location of %d city\n ",city_Num+1); scanf("%s",city[city_Num].location); printf("请输入城市相邻关系 相邻为1 不相邻为0\n"); int count=0; for(count=0; count<N; count++) { printf("请输入此城市与第%d城市的相邻关系",count+1 ); scanf("%d",&city[city_Num].neighbour[count]); } } int check(int metro ,int r_color ,int current) { /*测试当前着色方案是否可行*/ int j; for(j=0; j <current; j++) if(metro[current-1][j]==1&&r_color[j]==r_color[current-1]) return 0;/*城市相邻且颜色相同*/ return 1; } void drawColour(int metro ,int r_color ,int sum,int current) { int i; if(current <=sum)/*检查所有城市*/ { for(i=1; i <=4; i++) /*测试每种颜色*/ { r_color[current-1]=i;/*尝试着色*/ if(check(metro,r_color,current))/*若尝试成功*/ { drawColour(metro,r_color,sum,current+1);/*检查下一个城市*/ return; } } } } void main() { /*输入城市的信息*/ int timeCount; for(timeCount=0; timeCount<N; timeCount++) { inputInfo(city,timeCount); } /*信息传递给邻接矩阵*/ int r_color = {0}; int metro ; int matrixVerticalCount=0,matrixHorizonCount=0; for(matrixVerticalCount=0; matrixVerticalCount<N; matrixVerticalCount++) { for(matrixHorizonCount=0; matrixHorizonCount<N; matrixHorizonCount++) { metro[matrixVerticalCount][matrixHorizonCount]=city[matrixVerticalCount].neighbour[matrixHorizonCount]; } } int printmatrixOne=0,printmatrixTwo; for(printmatrixOne=0; printmatrixOne<N; printmatrixOne++) { for(printmatrixTwo=0; printmatrixTwo<N; printmatrixTwo++) { printf("%d ",metro[printmatrixOne][printmatrixTwo]); } printf("\n"); } drawColour(metro,r_color,5,1); printf( "\n "); int i; for(i=0; i <=4; i++) /*输出着色方案*/ printf( "第%d个城市%s颜色为%3d \n",i+1,city[i].name,r_color[i]); }
这样基本上将染色算法和信息输入搞定。
数据结构课设 原文内容要求:设计有效的逻辑数据结构与存储结构表示中国各行政区域的有关信息(如省会城市名,电话区号,人口数,地理位置等)及行政区域间的相邻关系、省会城市间的距离;分析与设计有效的算法对行政区域图进行染色,使每个行政区域染一种颜色且相邻的省份染不同颜色,而总的颜色数最少;另外如在全国省城之间建立通信网,构造费用最低的通信线路铺设方案。
相关文章推荐
- 以邻接矩阵作为存储结构实现图的创建与基本操作
- 图的遍历(DFS、BFS)使用邻接矩阵(数组)作为存储结构--C语言
- 数据结构之线性表的几种主要存储
- 总结线性表的几种主要存储结构
- 数据结构之(图存储结构之)邻接矩阵
- 数据结构:图的存储结构之邻接矩阵
- 图的存储结构(邻接矩阵)- 数据结构和算法56
- 图的存储结构-邻接矩阵
- 数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
- 图的存储结构 邻接矩阵
- C语言以邻接矩阵为存储结构的图的构造以及广度优先,深度优先遍历
- 数据结构之图的存储表示(邻接矩阵、邻接表和边集数组)
- 数据结构——图—概念和存储(邻接矩阵,邻接表)
- 建立图的存储结构 :邻接表 和 邻接矩阵
- 已知线性表中元素以值递增有序排列,并以单链表作为存储结构,设计一个算法,删除表中值相同的多余元素
- Java语言描述存储结构与邻接矩阵代码示例
- 再回首,数据结构——图的常用术语,邻接矩阵、邻接表存储结构
- 数据结构之图的邻接矩阵存储方法
- c++ 实现图的存储结构—邻接矩阵
- 2015-12-7 项目1—数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)