Skip to content

Instantly share code, notes, and snippets.

@philib
Created July 2, 2017 11:53
Show Gist options
  • Select an option

  • Save philib/66f3eb23365cbc1dfa48a4b3f61be032 to your computer and use it in GitHub Desktop.

Select an option

Save philib/66f3eb23365cbc1dfa48a4b3f61be032 to your computer and use it in GitHub Desktop.
package backtracking;
public class Kartenfaerben {
public boolean solve(int[][] karte, int[] faerbung, int farben, int stufe) {
for (int i = 0; i < karte.length; i++) {
if (karte[stufe][i] == 1 && faerbung[i] == 0) {
for (int farbe = 1; farbe <= farben; farbe++) {
faerbung[i] = farbe;
if (isCandidate(karte, faerbung, farbe, i)) {
if (isSolution(faerbung)) {
print(faerbung);
return true;
} else {
if (!solve(karte, faerbung, farben, stufe + 1)) {
faerbung[i] = 0;
return false;
}
}
}
}
}
}
return false;
}
public boolean isSolution(int[]farben){
for (int i = 0; i < farben.length; i++){
if(farben[i]==0){
return false;
}
}
return true;
}
public boolean isCandidate(int[][] karte, int[] faerbung, int farbe, int land) {
boolean test = true;
for (int i = 0; i < karte.length; i++) {
if (karte[land][i] == 1 && faerbung[i] == farbe) {
test = false;
}
}
return test;
}
public void print(int[] tmp) {
for (int i = 0; i < tmp.length; i++) {
System.out.print(tmp[i] + " ");
}
System.out.println("--------------");
}
public static void main(String args[]) {
Kartenfaerben k = new Kartenfaerben();
int[][] karte2 = {
{0, 1, 1, 1, 0, 0, 1},
{1, 0, 1, 1, 0, 0, 0},
{1, 1, 0, 1, 1, 0, 1},
{1, 1, 1, 0, 1, 0, 1},
{0, 0, 1, 1, 0, 1, 1},
{0, 0, 0, 0, 1, 0, 1},
{1, 0, 1, 1, 1, 1, 0}};
int[][] karte = {
{0, 1, 1, 0, 0, 0, 0},
{1, 0, 1, 0, 1, 1, 0},
{1, 1, 0, 1, 0, 0, 0},
{0, 0, 1, 0, 1, 0, 0},
{0, 1, 0, 1, 0, 1, 1},
{0, 1, 0, 0, 1, 0, 1},
{0, 0, 0, 0, 1, 1, 0}};
int[] farben = {1, 2, 3};
int[] faerbung = new int[karte.length];
faerbung[0] = 1;
k.solve(karte,faerbung,3,0);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment