Documente Academic
Documente Profesional
Documente Cultură
2
1
0
1
1
0
]
3
1
1
0
1
0
{
4
0
1
1
0
1
5
0
0
0
1
0
Vecinii sunt:
ara 1: 2, 3
ara 4: 2, 3, 5
ara 2: 1, 3, 4
ara 5: 4
ara 3: 1,2,4
Observaii:
1. Pentru n ri, matricea este ptratic, are n linii i n coloane
2. Pe diagonala principal elementele sunt nule, A[i, i] = 0 * ara ti nu se nvecineaz cu ea nsi
3. Matricea este simetric, adic A[i,j] = A[j, i] * dac ara ti se invecineaz cu ara tj atunci i tj se
nvecineaz cu ti.
Teorema colorrii hrilor: Orice hart plan poate colorat folosind cel mult 4 culori
Reprezentarea soluiei: - soluia are n componente, unde n este numrul de ri
-fiecare component xk are valori n mulimea {A, B, C, D}
Condiia de validare: - soluia nu are continuare dac dou ri vecine sunt colorate la fel
Prima soluie: A, B, C, A, B
Varianta recursiv
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
#include<iostream>
#include<fstream>
using namespace std;
int A[21][21];
char x[21];
int n,nr;
ifstream fin("harta.in");
void citire()
{
int i,j;
fin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fin>>A[i][j];
}
void tipar()
{
int i;
nr++;
for(i=1;i<=n;i++)
cout<<x[i];
cout<<'\n';
}
int valid(int k)
{
int i;
for(i=1;i<k;i++)
if((A[i][k]==1)&&(x[i]==x[k]))
return 0;
return 1;
}
void back(int k)
{
char c;
if(k==n+1) tipar();
else
for(c='A';c<='D';c++)
{
x[k]=c;
if(valid(k)) back(k+1);
}
}
int main()
{
citire();
back(1);
cout<<nr<<" solutii";
fin.close();
return 0;
}