Buscando urgentemente el programa fuente en lenguaje C para el problema de coloración de la tierra (diseño y análisis de algoritmos)
Teóricamente cuatro colores son suficientes. ¡El problema de los cuatro colores del mapa!
Puede haber múltiples soluciones. Mediante recursividad (dfs), se pueden generar todas las soluciones.
Código fuente del lenguaje C del algoritmo de coloración de mapas
Escribí un código fuente en C para colorear mapas (es decir, el principio de los cuatro colores).
Después de terminar de escribir, lo pensé y sentí que no era perfecto, porque desde un punto de vista práctico, los cuatro colores disponibles están colocados uno al lado del otro, y diferentes personas pueden tener diferentes opciones. . orden. Además, diferentes personas pueden elegir diferentes ciudades como punto de partida para colorear, pero el programa no tuvo eso en cuenta en ese momento.
Por lo tanto, modifique el programa de la siguiente manera y solicite a sus compañeros que analicen y señalen las deficiencias en el código:
#iincludes ltstdio.h gt
#Definición N 21
int all color[4];/*Colores disponibles*/
int ok(int metro[N][N], int r_color[N], int current)
{/*La función ok y la función go posterior son las mismas que la función original y están reservadas para comparar los dos algoritmos*/
int j;
for(j = 1; j lt corriente; j )
if(metro[actual][j]= = 1 amp; ampr _ color[j]= = r _ color[actual])
Devuelve 0;
Devuelve 1;
}
void go(entero[N][N], color entero[N], suma entera, entero actual)
p>
{
int I;
if (currentlt=suma)
for(I=1 ;ilt=4;i)
{
r _ color[actual]= I;
if(ok(metro, r_color, actual))
{
ir(metro, r_color, suma, corriente 1)
Regresar
}
}
}
Color vacío(int metro[N][N], int r_color[N], int suma, int inicio)
{ p>
int i, j, k;
r _ color[inicio]= todo color[0];
for(I = inicio 1; I! = inicio ; I=(i 1) (suma 1))/*Trata todos los números como un anillo*/
Si(i==0)/*El número de la ciudad comienza desde 1, por lo que el número 0 es omitido*/
Continuar;
Otro
for(j = 0; j lt4; j )
{
r _ color[ I]= all color[j];/*Seleccione el siguiente color, el resultado es diferente según el orden de los colores en allcolor*/
for(k = 1;k ltI;K)/*Compruebe si no hay conflicto y parece que se puede mejorar, como usar el método de búsqueda tabú*/
if(metro[I][k]= = 1 amp; ampr_color[k]==r_color[i])
Descanso;
if(k gt;=i)
Descanso;
}
}
void main()
{
int r _ color[N]= { 0 };
int t _ color[N]= { 0 };
int I;
int start/*El punto de partida de la coloración*/
int metro[N][N]={{0},
{0, 1, 1, 1, 1, 1, 1},
{0 , 1, 1, 1, 1},
{0 ,1,1,1,0,0,1},
{0,1,1,0,1 ,1},
{0,1,0,0 ,1,1,1,0,0,1,0,0,0,0,0,0,1},<
/p>
{0, 1, 0, 1, 0, 1, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 0, 1, 1, 1},
{0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1},
{0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1},
{0, 0, 0, 0, 0 ,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1},
{0,0,0,0,0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1},
{0, 0, 0, 0, 0, 0 ,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1},
{0,0,0,0,0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ,0,0,0,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,1,0,0, 1, 1, 1, 1, 1, 0, 1},
{0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 ,1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, 1, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 ,1},
{0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1, 1, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 , 1, 1}};
todo color[0]= 1; todo color[1]= 2; todo color[2]= 3; todo color[3]= 4; El orden, el orden es diferente, el resultado es diferente*/
start = 1;
/* clrscr();*/
printf(" \nTodos los colores son :\ n ");
for(I = 0; I lt4; I)/*Orden de selección de color actual*/
printf("d ", todos color[I] );
go(metro, r_color, 20, 1);
printf("\nPrimer método:\n");
for (I = 1;ilt=20;i)
printf("3d", r_color[I]);
color(metro,t_color,20,start) ;
printf("\nSegundo método:\n");
printf("\ny el metro de inicio es: d\n",start);
for(I = 1;ilt=20;i)
printf("3d",t_color[I]);
}
p>
Se dice que es una coloración humanizada. De hecho, hay otro tema que no se ha tenido en cuenta y es que los operadores cambian de color, tal como todos juegan al juego "Buscaminas". De hecho, también es muy fácil de implementar. El orden de coloración se puede definir como el orden de selección de color.