int brade[11][11]; int losning[32][6]; #define OTILLATEN 2 #define KULA 1 #define TOM 0 void init(void){ //Gör i ordning brädet innan spelet börjar. int i,j; for(i=0;i<=10;i++) for(j=0;j<=10;j++) brade[i][j]=OTILLATEN; for(i=2;i<=8;i++) for(j=4;j<=6;j++) brade[i][j]=KULA; for(i=4;i<=6;i++) for(j=2;j<=8;j++) brade[i][j]=KULA; brade[5][5]=TOM; } void dragen(int lista[32][6],int *n){ /* Hitta alla möjliga drag. Skriv in information om alla möjliga drag (max 32) i lista. För varje möjligt drag ska vi spara (i denna ordning): 1) rad och kolumn där den kula som ska flyttas finns nu. 2) rad och kolumn där den kula som ska hoppas över finns. 3) rad och kolumn dit kulan ska flyttas. */ int i,j; *n=0; //n kommer att innehålla antal möjliga drag. for(i=2;i<=8;i++) for(j=2;j<=8;j++) if (brade[i][j]==KULA){ //Det finns en kula i aktuell position. Undersök om det går att flytta den. if (brade[i+1][j]==KULA && brade[i+2][j]==TOM){ //Kulan kan flyttas nedåt (om vi betraktar i som rad och j som kolumn). (*n)++; lista[*n][0]=i; lista[*n][1]=j; lista[*n][2]=i+1; lista[*n][3]=j; lista[*n][4]=i+2; lista[*n][5]=j; } if (brade[i-1][j]==1 && brade[i-2][j]==0){ //Kulan kan flyttas uppåt (om vi betraktar i som rad och j som kolumn). (*n)++; lista[*n][0]=i; lista[*n][1]=j; lista[*n][2]=i-1; lista[*n][3]=j; lista[*n][4]=i-2; lista[*n][5]=j; } if (brade[i][j+1]==1 && brade[i][j+2]==0){ //Kulan kan flyttas åt höger (om vi betraktar i som rad och j som kolumn). (*n)++; lista[*n][0]=i; lista[*n][1]=j; lista[*n][2]=i; lista[*n][3]=j+1; lista[*n][4]=i; lista[*n][5]=j+2; } if (brade[i][j-1]==1 && brade[i][j-2]==0){ //Kulan kan flyttas åt vänster (om vi betraktar i som rad och j som kolumn). (*n)++; lista[*n][0]=i; lista[*n][1]=j; lista[*n][2]=i; lista[*n][3]=j-1; lista[*n][4]=i; lista[*n][5]=j-2; } } } void nastadrag(int nr){ int k,n; int i,j; int lista[32][6]; if(nr==31){ printf("Lösning funnen\n"); abort(); } else{ dragen(lista,&n); for(k=1;k<=n;k++){ //Prova (rekursivt) alla möjliga drag. brade[lista[k][0]][lista[k][1]]=TOM; brade[lista[k][2]][lista[k][3]]=TOM; brade[lista[k][4]][lista[k][5]]=KULA; nastadrag(nr+1); brade[lista[k][0]][lista[k][1]]=KULA; brade[lista[k][2]][lista[k][3]]=KULA; brade[lista[k][4]][lista[k][5]]=TOM; } } } main(){ init(); nastadrag(0); }