数据结构实验 四色地图染色 c语言实现
生活随笔
收集整理的這篇文章主要介紹了
数据结构实验 四色地图染色 c语言实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
main.c?
#include"map.h" //#include"stack.h" #include<stdio.h> //一個鄰接矩陣 int main() {int adjoin[NUM][NUM];//InitMap(adjoin);SeqStack stack;//InitSeqStack(&stack);Map(adjoin,&stack);//最后再打印出來for(int i=0;i<stack.size;i++){printf("%d-%d\n",i,stack.color[i]);}return 0; }?map.c
#include<stdlib.h> #include"map.h" //#include"stack.h" void InitMap(int adjoin[NUM][NUM]) {int temp[NUM][NUM]={{0,1,1,1,1,1,0},{1,0,0,0,0,1,0},{1,0,0,1,1,0,0},{1,0,1,0,1,1,0},{1,0,1,1,0,1,0},{1,1,0,1,1,0,0},{0,0,0,0,0,0,0}};int i=0;for(;i<NUM;i++){int j=0;for(;j<NUM;j++){adjoin[i][j]=temp[i][j];}} } int AdjoinSearch(SeqStack *stack,int adjoin[NUM][NUM],int sub,int color_temp) {int i;for(i=0;i<=stack->size-1;i++)//stack->size-1為stack-》color的最大下標{if(adjoin[sub][i]==1&&sub!=i)//adjoin[sub][i]==1即與編號為i的塊相鄰{if(stack->color[i]==color_temp){return 1;}}}return 0; } void Map(int adjoin[NUM][NUM],SeqStack *stack) {InitMap(adjoin);InitSeqStack(stack);SeqStackPush(stack,1);//第一個染一號色//int i;//int PopFlag=0;int ColorRem=0;while(stack->size!=NUM)//stack->size是棧中元素的個數{//if(stack->size)int color_temp=1;if(AdjoinSearch(stack,adjoin,stack->size,color_temp)==1||ColorRem>=color_temp)//相鄰的有重復的//stack->size即為要檢驗的元素在鄰接表中的下標{color_temp=2;if(AdjoinSearch(stack,adjoin,stack->size,color_temp)==1||ColorRem>=color_temp)//相鄰的有重復的//stack->size即為要檢驗的元素在鄰接表中的下標{color_temp=3;if(AdjoinSearch(stack,adjoin,stack->size,color_temp)==1||ColorRem>=color_temp)//相鄰的有重復的//stack->size即為要檢驗的元素在鄰接表中的下標{color_temp=4;if(AdjoinSearch(stack,adjoin,stack->size,color_temp)==1||ColorRem>=color_temp)//相鄰的有重復的//stack->size即為要檢驗的元素在鄰接表中的下標{//說明四種顏色都不行//SeqStackPop(&stack);if( (stack->color[stack->size-1]<=3)&&(AdjoinSearch(stack,adjoin,stack->size-1,stack->color[stack->size-1]+1)==0)){SeqStackChange(stack);ColorRem=0;}else{//PopFlag=1;ColorRem=stack->color[stack->size-1];//SeqStackPop(stack);stack->size--;}}else{SeqStackPush(stack,color_temp);ColorRem=0;}}else{SeqStackPush(stack,color_temp);ColorRem=0;}}else{SeqStackPush(stack,color_temp);ColorRem=0;}}else{SeqStackPush(stack,color_temp);ColorRem=0;}}}map.h
#define NUM 7 #include"stack.h" void Map(int adjoin[NUM][NUM],SeqStack *satck); void InitMap(int adjoin[NUM][NUM]); int AdjoinSearch(SeqStack *stack,int adjoin[NUM][NUM],int sub,int color_temp);stack.c
#include"stack.h" #include<stdlib.h> void InitSeqStack(SeqStack *stack) {stack->capacity=1000;stack->size=0;stack->color=(int *)malloc(sizeof(int)*stack->capacity);//第一個stack[0] }//初始化了一片空間,但是里面沒有存任何東西,stack->size=0,下標為size-1時為首元素地址 void SeqStackPush(SeqStack *stack,int color) {stack->size++;stack->color[stack->size-1]=color; } int SeqstackPop(SeqStack *stack) {stack->size--;if(stack->size==0)return 0;//無解,出大問題elsereturn 1; } void SeqStackChange(SeqStack *stack) {if(stack->size!=0)stack->color[stack->size-1]++;//進這個函數的前提就是有色可染,不用多考慮 }stack.h
typedef struct SeqStack {int * color;int size;int capacity; }SeqStack; void InitSeqStack(SeqStack *stack); void SeqStackPush(SeqStack *stack,int color); int SeqStackPop(SeqStack * stack); void SeqStackChange(SeqStack *stack);//棧頂元素顏色遞增總結
以上是生活随笔為你收集整理的数据结构实验 四色地图染色 c语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高通camx configure_str
- 下一篇: 求次数不大于5的不可约多项式