1,178
社区成员
发帖
与我相关
我的任务
分享
//这是cpp文件
#include<stdio.h>
#include"chang_color.h"
#define m_max 50
#define n_max 50
int main()
{
int i,j,m,n,i0,j0,new_color;
printf("输入颜色区域的高度和宽度:");
scanf("%d%d",&m,&n);
int area[m_max+1][n_max+1];
void chang_color(int array[m_max+1][n_max+1],int m,int n,int i0,int j0,int new_color);
printf("\n请输入各点的颜色:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&area[i][j]);
}
}
printf("\n输入想改变颜色的点和新颜色值:");
scanf("%d%d%%d",&i0,&j0,&new_color);
chang_color(area,m,n,i0,j0,new_color);
printf("改变颜色后:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
printf("%d\t",area[i][j]);
}
putchar(' ');
}
putchar(' ');
return(0);
}
//这是chang_color.h
#include"stack_function.h"
#include<stdio.h>
#define m_max 50
#define n_max 50
void chang_color(int array[m_max+1][n_max+1],int m,int n,int i0,int j0,int new_color)
{
if(i0<1||i0>m||j0<1||j0>n){ printf("此位置不存在");exit(0);}
int color_init=array[i0][j0],x,y;
Sqstack s;
Initstack(s);
push(s,i0);
push(s,j0);
do
{
pop(s,y);
pop(s,x);
if(x-1>0&&array[x-1][y]==color_init)
{
array[x-1][y]=new_color;
push(s,x-1);
push(s,y);
}
if(y-1>0&&array[x][y-1]==color_init)
{
array[x][y-1]=new_color;
push(s,x);
push(s,y-1);
}
if(x+1<=m&&array[x+1][y]==color_init)
{
array[x+1][y]=new_color;
push(s,x+1);
push(s,y);
}
if(y+1<=n&&array[x][y+1]==color_init)
{
array[x][y+1]=new_color;
push(s,x);
push(s,y+1);
}
}while(!Stackempty(s));
}
//这是我写的栈的操作函数头文件
#include<stdlib.h>
#include<stdio.h>
# define stack_max_size 20
#define stack_increase_size 10
#define ElemType int
typedef struct
{
ElemType *top;
ElemType *base;
int stack_allow_size;
}Sqstack;
void Initstack (Sqstack&s)
{
s.top=s.base=(ElemType*)malloc(stack_max_size*sizeof(ElemType));
if(!s.base)
{
printf("创建栈失败");
exit(0);
}
s.stack_allow_size=stack_max_size;
}
void Destroystack (Sqstack &s)
{
free(s.base);
s.base=NULL;
s.top=NULL;
s.stack_allow_size=0;
}
void Clearstack(Sqstack&s)
{
s.top=s.base;
}
bool Stackempty(Sqstack s)
{
if(s.base==s.top)
return(true);
else return(false);
}
int stacklength(Sqstack s)
{
return(s.top-s.base);
}
void gettop(Sqstack s,ElemType&e)
{
if(s.top==s.base) printf("此栈为空,无法取栈顶元素");
e=*(s.top-1);
}
void push(Sqstack&s,ElemType e)
{
if((s.top-s.base)>=s.stack_allow_size)
{
s.base=(ElemType*)realloc(s.base,(s.stack_allow_size+stack_increase_size)*sizeof(ElemType));
if(!s.base) {printf("空间扩大失败");exit(0);}
s.top=s.base+s.stack_allow_size;
s.stack_allow_size+=stack_increase_size;
}
*s.top++=e;
}
void pop(Sqstack&s,ElemType&e)
{
if(s.top==s.base)
{
printf("此栈为空,删除栈顶元素操作不能进行");
}
else e=*(--s.top);
}