Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace lolepes
- {
- /// <summary>
- /// Ez az osztály az állapot tér reprezentáció
- /// Feladat:
- /// Egy N x N-es tábla bal felső sarkából juttassuk el
- /// a lovat szabályos lólépésekben a jobb alsó sarokba.
- ///
- /// Kezdőállapot(ha N=4) =
- ///
- /// 00000000
- /// 00000000
- /// 00H00000
- /// 00000000
- /// 00000000
- /// 00000000
- /// 00000000
- /// 00000000
- ///
- /// (az 1.,uccsó 2 0 margó,felső és alsó 2 sor szintén)
- ///
- ///
- /// Egy állapotot így jellemzünk:
- ///
- /// char[][] tábla; [Itt van a tábla állapota(Semmi=0,Huszár=H)]
- /// int xH,yH; (Huszár helye);
- /// Kezdetben xH=2; yH=2;
- /// Vége,ha xH=5; yH=5;
- ///
- /// Operátorok:
- ///
- /// Lólépések,8db:
- ///
- /// -2,-1
- /// -2,1
- /// 2,-1
- /// 2,1
- /// -1,-2
- /// -1,2
- /// 1,-2
- /// 1,2
- ///
- /// Előfeltétel:
- /// igaz(Amúgy nincs)
- /// Utófeltétel:
- /// Nem szabad margón állni, azaz
- ///
- /// xH nagyobb-egyenlő, mint 2,
- /// yH nagyobb-egyenlő, mint 2,
- /// xH kisebb-egyenlő, mint 5,
- /// yH kisebb-egyenlő, mint 5,
- ///
- /// </summary>
- class Állapot
- {
- private const int N = 4;
- private char[,] tábla = new char[N, N];
- private int xH, yH;
- //konstruktor kezdőértéket állít be
- public Állapot()
- {
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < N; j++)
- {
- tábla[i,j]='0';
- }
- }
- tábla[2, 2] = 'H';
- xH = 2;
- yH = 2;
- }
- public bool ÁllapotE()
- {
- //A táblán tartja a huszárt,nem engedi margóra
- return xH >= 2 && xH <= N + 1 && yH >= 2 && yH <= N + 1;
- }
- public bool VégállapotE()
- {
- return xH == N + 1 && yH == N+1;
- }
- // "O" (Operátor) megadása szuperoperátorral
- //A szuperoperátor az alapoperátorokat hívja
- //Mindig cask egy paramétere van: Melyik alapoperátort kell hívni
- public Állapot SzuperOp(int i)
- {
- switch (i)
- {
- case 0: return lólépés(-2, -1);
- case 1: return lólépés(-2, 1);
- case 2: return lólépés(2, -1);
- case 3: return lólépés(2, -1);
- case 4: return lólépés(-1, -2);
- case 5: return lólépés(-1, 2);
- case 6: return lólépés(1, -2);
- case 7: return lólépés(1, 2);
- default: return null;
- }
- }
- private Állapot lólépés(int relativX,int relativY)
- {
- if (preLólépés(relativX,relativY) )
- {
- Állapot újÁllapot = new Állapot();
- újÁllapot.tábla[2, 2] = '0'; //Kivettem a huszárt
- újÁllapot.xH = this.xH + relativX;
- újÁllapot.yH = this.yH + relativY;
- újÁllapot.tábla[újÁllapot.xH, újÁllapot.yH] = 'H';
- if (újÁllapot.ÁllapotE()) return újÁllapot;
- }
- return null;
- }
- private bool preLólépés(int relativX, int relativY)
- {
- return true;
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- }
- }
- }
Add Comment
Please, Sign In to add comment