==========
main.c
==========
/* Algoritmo de preenchimento - Estrutura de Dados
| Kássio Rômulo Lima SOusa CP09126-81 | Núbia Cristine Silveira dos Santos CP09142-81 |
*/
#define TRUE 1
#define FALSE 0
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include "stack.h"
int n, m, cont;
void pintar(int k, int cor, stack *pilha, int *matriz){
int cor_antiga;
int ponto;
int ponto_p;
int teste;
if((k == (n*m)-1) && (cont == 1)){
k = 0;
cont++;
}
ponto = k;
stkpush(pilha, (void*) ponto);
cor_antiga = matriz[ponto];
while(stkisempty(pilha) == FALSE){
ponto_p = (int) stkpop(pilha);
if(matriz[ponto_p] == cor_antiga){
stkpush(pilha, (void *) k-m);
stkpush(pilha, (void *) k-1);
stkpush(pilha, (void *) k+m);
stkpush(pilha, (void *) k+1);
matriz[ponto_p] = cor;
k++;
}
}
}
int main(){
int i, j, k, x, y, regiao, cor_escolhida;
int *matriz;
stack *pilha;
printf("Entre com o tamanho da matriz x e y: ");
scanf("%d %d", &n, &m);
matriz = (int *) calloc(sizeof(int), n*m);
pilha = stkCreate(n*m);
for(i=0; i<n; i++){
for(j=0; j<m; j++){
k = i*m +j;
printf("Insira a cor da posicao [%d]: ", k);
scanf("%d", &matriz[k]);
}
}
printf("Entre com as coordenadas que deseja pintar: ");
scanf("%d%d", &x, &y);
printf("Entre com a cor desejeda: ");
scanf("%d", &cor_escolhida);
pintar(x*m+y, cor_escolhida, pilha, matriz);
printf("\n\nMatriz pintada: \n\n");
for(i=0; i<n; i++){
for(j=0; j<m; j++){
k = i*m+j;
printf("%d ", matriz[k]);
}
printf("\n");
}
system("PAUSE");
}
=============
stack.c
=============
/* Algoritmo de preenchimento - Estrutura de Dados
| Kássio Rômulo Lima SOusa CP09126-81 | Núbia Cristine Silveira dos Santos CP09142-81 |
*/
#define _STACK_H_
#define TRUE 1
#define FALSE 0
#include<stdio.h>
#include<assert.h>
#include "stack.h"
stack *stkCreate(int max){
stack *s;
if(max>0){
s = (stack *) malloc(sizeof(stack));
if(s!=NULL){
s->item = (void **) malloc(max*sizeof(void *));
if(s->item!=NULL){
s->maxitens = max;
s->topo = -1;
return s;
}
free(s);
}
}
return NULL;
}
int stkdestroy(stack *s){
if(s!=NULL){
free(s->item);
free(s);
return TRUE;
}
return FALSE;
}
int stkpush(stack *s, void *item){
if(s!=NULL){
if(s->topo < s->maxitens-1){
s->topo++;
s->item[s->topo] = item;
return TRUE;
}
}
return FALSE;
}
void *stkpop(stack *s){
void *aux;
if(s!=NULL){
if(s->topo>-1){
aux = s->item[s->topo];
s->topo--;
return aux;
}
}
return NULL;
}
void *stktop(stack *s){
if(s!=NULL){
if(s->topo>-1){
return s->item[s->topo];
}
}
return NULL;
}
int stkisempty(stack *s){
if(s!=NULL){
if(s->topo<0){
return TRUE;
}
}
return FALSE;
}
==============
stack.h
==============
#ifndef __STACK_H_
#define __STACK_H_
/* Estrutura */
typedef struct _stack_{
int maxitens;
int topo;
void ** item;
}stack;
/*Funcao criar pilha:
pré-condições: ; maxItens > 0
; pós-condição1: retorna a pilha
; pós-condição2: retorna null em caso de maxitens>0 ou nao houver espaço para alocar
*/
stack *stkCreate(int max);
/*Funcao Destruir pilha
pré-condições: ; s nao ser null
; retorna TRUE se a pilha for eliminada
; retorna FALSE caso nao satisfaça as pré-condições
*/
int stkdestroy(stack *s);
/*Funcao Insere elemento da pilha:
pré-condições: ; s nao ser null e s->topo tem que ser menor que s->maxitens-1
; retorna TRUE se o elemento for inserido
*/
int stkpush(stack *s, void *item);
/*Funcao Remove elemento da pilha:
pré-condições: ; c nao ser null e c->item nao pode ser null
; retorna o elemento se o elemento for removido
; retorna NULL caso nao satisfaça as pré-condições
*/
void *stkpop(stack *s);
/*Funcao Retorna elemento do topo:
pré-condições: ; s nao ser null e s->topo te que ser maior que -1
; pós-condição1: retorna elemento do topo
*/
void *stktop(stack *s);
/*Funcao Confere se pilha vazia:
pré-condições: ; s nao ser null e s->topo te que ser menor que 0
; retorna TRUE se pilha for vazia
; pós-condição2: retorna FALSE se pilha nao for vazia
*/
int stkisempty(stack *s);
#endif
Coloque aqui o seu email