主题:地图染色
急需的程序,快加入
随便画一个地图,就是相邻的颜色不能一样,颜色的种类有自己定,但不能太多,更重要的是,这个程序要求用堆栈做,其他的方法不可以,
#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]
随便画一个地图,就是相邻的颜色不能一样,颜色的种类有自己定,但不能太多,更重要的是,这个程序要求用堆栈做,其他的方法不可以,
#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]