回 帖 发 新 帖 刷新版面

主题:地图染色

急需的程序,快加入

随便画一个地图,就是相邻的颜色不能一样,颜色的种类有自己定,但不能太多,更重要的是,这个程序要求用堆栈做,其他的方法不可以,
#include<stdlib.h>
#include<stdio.h>
#define StackSize 100
typedef int DataType;
int tag ;
int a[7][7]={
             {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}    //地图,相邻的用1,不相邻的用0表示
             };
int b[4]={1,2,3,4}; //要对这个地图染色,定为四种
typedef struct
{
 DataType stack[StackSize];
 int top;
 DataType *x;
}SeqStack;
 SeqStack s;
void stackInitiate(SeqStack *s)//堆栈初始化
{
s->top=0;
 }
int stackNotEmpty(SeqStack *s)  //堆栈非空否
{
 if(s->top<=0)return 0;
   else return 1;
   }
int stackPush(SeqStack *s,DataType x) //入栈
{
  if (s->top>=StackSize)
  {
   printf("the stack is full/n");
   return 0;
   }
   else
   {
    s->stack[s->top]=x;
   s->top++;
    return 1;
    }
 }
 int stackPop(SeqStack *s,DataType *d)  //出栈
 {
  if(s->top<=0)
  {
    printf("the  stack is empty/n");
    return 0;
    }
  else
  {
   s->top--;
   *d=s->stack[s->top];
   return 1;
   }
}
int stackTop(SeqStack s,DataType *d) //取栈定元素
{
 if(s.top<=0)
  {
   printf("the stack is empty/n");
   return 0;
  }
else
  {
   *d=s.stack[s.top-1];
   return 1;
   }
 }
void xunhai()  //根据数组的值,和颜色,进行相匹配。
{

int q[8],*p,w[8];
int j,i,k;
int x,t;
i=0;
p=q;
for(i=0;i<7;i++)
{stackPop(&s,&x);
printf("%d",x);
printf("\n");
if(i==0)
 {

  stackPush(&s,b[0]);
 }
else
     if(i==1)
        { if(a[1][1]==0)
              {
                stackPush(&s,b[0]);
               }
          else
               {
                stackPush(&s,b[1]);
                }
     }
   else
     {
       for(j=0;j<i;j++)
          {
            if(a[i][j]==1)
                {stackTop(s,&x);
                 q[8]=x;
                 stackPush(&s,x);
                      if (j==i-1)
                       {comp(p);
                         t=comp1();
                         tag=comp1();
                         if(tag!=0){i--;stackTop(s,&x);}
                        stackPush(&s,t);
                         }
                  }
             else {stackTop(s,&x);
                   stackPush(&s,x);
                  }
           }
 }
}
}
int comp(char *q)
{
int i,j,k,c[4];
  j=0;
  k=0;
  i=0;
for(i=0;i<4;i++)
for(j=0;;j++)
{
 if(b[i]!=q[j])b[i]=c[k];
}
comp1(c[4]);
}
int comp1(int c[4])
{
SeqStack s;
int p,k,j,x;
int d[4];
j=0;
for(p=0;p<4;p++)
for(k=0;k<4;k++)
{ if(b[p]==c[k])c[k]=d[j];j++;
 }
if(j==3)
{
  tag++;

 return tag;
}
if(tag==0)
 return d[0];
 else
    {if(tag==1)
        return d[1];
        else
            {if(tag==2)
               return d[2];
               else
                  {if(tag==3)
                      return d[3];
                   }
            }
     }

}
void xunhai();
int comp();
int  comp1();
main()
{
 SeqStack s;

xunhai();

getch();
}
这是 我做的程序,运行能成功,就是为什么结果是错误的,
望大家进来看看,若看不懂我的编辑的程序,请你们能不能自己编一个,谢谢,
[em30][em30][em30][em30]

回复列表 (共3个回复)

沙发

对方格形的地图只要两种颜色就够了.

板凳

它这个不是方格形地图吧,是邻接矩阵。

四色猜想已经被人借助计算机证出来了,现在成了‘四色定理’。

3 楼


别只顾着说,看看这个到底要怎么编辑,
这个程序好象没有初始化,那到底要对堆栈什么初始化

我来回复

您尚未登录,请登录后再回复。点此登录或注册