日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构实验 四色地图染色 c语言实现

發布時間:2023/12/31 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构实验 四色地图染色 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语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。