Nadesłany przez Tomasz Lubiński, 25 sierpnia 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Konik - C#/Konik.cs:
/* Problem konika (skoczka) szachowego www.algorytm.org Adam Mika, Tomasz Lubinski (c) 2008 Algorytm podaje pierwsze dopuszczalne rozwiązanie problemu dla podanego punktu startowego pod warunkiem, że takie rozwiązanie istnieje. */ using System; namespace Konik { /// <summary> /// Problem konika (skoczka) szachowego /// </summary> class ProblemKonika { /// <summary> /// Algorytm podaje pierwsze dopuszczalne rozwiązanie problemu dla podanego /// punktu startowego pod warunkiem, że takie rozwiązanie istnieje. /// </summary> [STAThread] static void Main(string[] args) { int max = 8; //rozmiar problemu - wymiar szachownicy int[,] tab = new int[max,max]; for(int i=0 ; i<max ; i++) for(int j=0 ; j<max ; j++) tab[i,j] = 0; if (skoczek(tab, max, 0, 0, 1) == true) { for(int i=0 ; i<max ; i++) { for(int j=0 ; j<max ; j++) Console.Write(tab[j,i] + " "); Console.WriteLine(); } } } private static bool ruch(int[,] tab, int N, int wariant, int x, int y, ref int nx, ref int ny) { switch (wariant) { case 1: nx = x+1; ny = y-2; break; case 2: nx = x+2; ny = y-1; break; case 3: nx = x+2; ny = y+1; break; case 4: nx = x+1; ny = y+2; break; case 5: nx = x-1; ny = y+2; break; case 6: nx = x-2; ny = y+1; break; case 7: nx = x-2; ny = y-1; break; case 8: nx = x-1; ny = y-2; break; } if (0<=nx && nx<N && 0<=ny && ny<N && tab[nx,ny]==0) return true; return false; } public static bool skoczek(int[,] tab, int n, int x, int y, int ktory) { int nx, ny; nx = 0; ny = 0; tab[x,y] = ktory; if(ktory == n*n) { return true; } else { for(int w=1 ; w<9 ; w++) if(ruch(tab, n, w, x, y, ref nx, ref ny) == true) if (skoczek(tab, n, nx, ny, ktory+1) == true) return true; tab[x,y] = 0; } return false; } } }