algorytm.org

Implementacja w C#



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Problem skoczka (konika) szachowego - Implementacja w C#
Ocena użytkownikóww: *****  / 3
SłabyŚwietny
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;
		} 
	}
}
Dodaj komentarz