diff --git a/floodit_exemplo.c b/floodit_exemplo.c
new file mode 100644
index 0000000000000000000000000000000000000000..d84ef39f531955f039a66df82344048f0f0d4a0e
--- /dev/null
+++ b/floodit_exemplo.c
@@ -0,0 +1,126 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+
+typedef struct {
+  int nlinhas;
+  int ncolunas;
+  int ncores;
+  int **mapa;
+} tmapa;
+
+void gera_mapa(tmapa *m, int semente) {
+  int i, j;
+
+  if(semente < 0)
+    srand(time(NULL));  
+  else
+    srand(semente);  
+  m->mapa = (int**) malloc(m->nlinhas * sizeof(int*));
+  for(i = 0; i < m->nlinhas; i++) {
+    m->mapa[i] = (int*) malloc(m->ncolunas * sizeof(int));
+    for(j = 0; j < m->ncolunas; j++)
+      m->mapa[i][j] = 1 + rand() % m->ncores;
+  }
+}
+
+void carrega_mapa(tmapa *m) {
+  int i, j;
+
+  scanf("%d", &(m->nlinhas));
+  scanf("%d", &(m->ncolunas));
+  scanf("%d", &(m->ncores));
+  m->mapa = (int**) malloc(m->nlinhas * sizeof(int*));
+  for(i = 0; i < m->nlinhas; i++) {
+    m->mapa[i] = (int*) malloc(m->ncolunas * sizeof(int));
+    for(j = 0; j < m->ncolunas; j++)
+      scanf("%d", &(m->mapa[i][j]));
+  }
+}
+
+void mostra_mapa(tmapa *m) {
+  int i, j;
+
+  printf("%d %d %d\n", m->nlinhas, m->ncolunas, m->ncores);
+  for(i = 0; i < m->nlinhas; i++) {
+    for(j = 0; j < m->ncolunas; j++)
+      if(m->ncores > 10)
+	printf("%02d ", m->mapa[i][j]);
+      else
+	printf("%d ", m->mapa[i][j]);
+    printf("\n");
+  }
+}
+
+void mostra_mapa_cor(tmapa *m) {
+  int i, j;
+  char* cor_ansi[] = { "\x1b[0m",
+		       "\x1b[31m", "\x1b[32m", "\x1b[33m",
+		       "\x1b[34m", "\x1b[35m", "\x1b[36m",
+		       "\x1b[37m", "\x1b[30;1m", "\x1b[31;1m",
+		       "\x1b[32;1m", "\x1b[33;1m", "\x1b[34;1m",
+		       "\x1b[35;1m", "\x1b[36;1m", "\x1b[37;1m" };
+
+  if(m->ncores > 15) {
+    mostra_mapa(m);
+    return;
+  }
+  printf("%d %d %d\n", m->nlinhas, m->ncolunas, m->ncores);
+  for(i = 0; i < m->nlinhas; i++) {
+    for(j = 0; j < m->ncolunas; j++)
+      if(m->ncores > 10)
+	printf("%s%02d%s ", cor_ansi[m->mapa[i][j]], m->mapa[i][j], cor_ansi[0]);
+      else
+	printf("%s%d%s ", cor_ansi[m->mapa[i][j]], m->mapa[i][j], cor_ansi[0]);
+    printf("\n");
+  }
+}
+
+void pinta(tmapa *m, int l, int c, int fundo, int cor) {
+  m->mapa[l][c] = cor;
+  if(l < m->nlinhas - 1 && m->mapa[l+1][c] == fundo)
+    pinta(m, l+1, c, fundo, cor);
+  if(c < m->ncolunas - 1 && m->mapa[l][c+1] == fundo)
+    pinta(m, l, c+1, fundo, cor);
+  if(l > 0 && m->mapa[l-1][c] == fundo)
+    pinta(m, l-1, c, fundo, cor);
+  if(c > 0 && m->mapa[l][c-1] == fundo)
+    pinta(m, l, c-1, fundo, cor);
+}
+
+void pinta_mapa(tmapa *m, int cor) {
+  if(cor == m->mapa[0][0])
+    return;
+  pinta(m, 0, 0, m->mapa[0][0], cor);
+}
+
+int main(int argc, char **argv) {
+  int cor;
+  tmapa m;
+  int semente;
+
+  if(argc < 4 || argc > 5) {
+    printf("uso: %s <numero_de_linhas> <numero_de_colunas> <numero_de_cores> [<semente_aleatoria>]\n", argv[0]);
+    exit(1);
+  }
+
+  m.nlinhas = atoi(argv[1]);
+  m.ncolunas = atoi(argv[2]);
+  m.ncores = atoi(argv[3]);
+
+  if(argc == 5)
+    semente = atoi(argv[4]);
+  else
+    semente = -1;
+  gera_mapa(&m, semente);
+  mostra_mapa_cor(&m); 
+
+  scanf("%d", &cor);
+  while(cor > 0 && cor <= m.ncores) {
+    pinta_mapa(&m, cor);
+    mostra_mapa_cor(&m); // para mostrar sem cores use mostra_mapa(&m);
+    scanf("%d", &cor);
+  }
+
+  return 0;
+}