>> ROB BOWDEN: Hei.
Olen Rob, ja toivon teidän peli peli 15.
Nyt on neljä toimintoa tarvitset toteuttaa tätä ohjelmaa - init,
piirtää, liikkua, ja voitti.
Joten katsokaamme init.
>> Täällä näemme ensimmäinen asia olemme aikoo tehdä, on julistaa muuttuja
nimeltään laskuri.
Se tulee alustaa d kertaa d miinus 1.
Muista, että d on ulottuvuus meidän aluksella.
Kuinka init on menossa töihin on se menee kerrata koko keskustelufoorumilla
ja aiomme aloittaa ylhäällä vasemmalla.
>> Ja haluan vain sanoa, me on 4 4 aluksella.
Niin ylhäällä vasemmalla olemme aikoo sanoa on 15.
Ja sitten me vain odotamme laskea kautta levyt, sanoi 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4, ja niin edelleen.
Joten vasemmassa yläkulmassa, odotamme olevan d kertaa d miinus 1, joka 4 4
tapauksessa tulee olemaan 16 miinus 1, mikä on oikein 15.
>> Ja nyt täällä on, jos aiomme kerrata koko järjestelmässä.
Ja me aiomme tehdä kunkin aseman hallituksen nykyinen arvo
vastatoimia, ja sitten vasta tulee dekrementoidaan siten, että seuraava
kanta pääsemme joutuu counter olla yksi vähemmän kuin
edelliseen asentoon.
Joten meillä oli aluksi 15 ja vähentääksesi laskuri.
Niin aiomme antaa 14 seuraavaan paikkaan, vähenemä laskuri,
ja aiomme valittu 13, ja niin edelleen.
>> Lopuksi, meidän täytyy käsitellä, että nurkkaan tapauksessa, jos hallitus on jopa
ulottuvuus, sitten vain tehdä 15, 14, 13, 12, kaikki alas 3, 2, 1, on
aio jättää meille ratkaisematon aluksella.
Ja meillä on vaihtaa 1 ja 2.
Joten, jos d mod 2 on 0, se miten aiomme tarkistaa
onko se edes.
Jos d mod 2 on 0, niin rivillä d miinus 1, joka on alarivissä, ja
asennossa d miinus 2 tai sarake d miinus 2, aiomme asettaa, että 2 ja
sarake d miinus 3 olemme menossa asetettu 1.
Niin että on vain peruutettaessa jossa 1 ja 2 tällä hetkellä ovat.
>> Lopuksi, aiomme asettaa hyvin Alhaalla oikealla yhtä tyhjä, jos
tyhjä on hash määritelty yläosassa kuin 0.
Niin, se ei ollut ehdottoman välttämätöntä, koska tämä silmukka joutuu
asettaa alhaalta oikealla 0, koska laskuri luonnollisesti saavuttaa 0.
Mutta joka luottaa meihin tietäen, että Aihio hajauttamat löytää 0.
Jos menen tähän ohjelmaan ja myöhemmin muuttaa tyhjän ruudun yläosassa 100, se
pitäisi silti toimia.
>> Joten tämä on vain varmistaa, että Alhaalla oikealla on oikeastaan ​​sama kuin meidän
Nolla-arvoa.
Lopuksi, meillä on kaksi globaaleja muuttujia, niin tyhjä i ja tyhjä j, ja näemme
ilmoitettuja huipulla.
Ja aiomme käyttää näitä kahta globaalia muuttujat seurata
asema tyhjäksi, jolloin emme täytyy käydä läpi koko
aluksella löytää tyhjän joka ikinen aikaa yritämme tehdä liikkua.
Joten kanta aihion aina on aikoo aloittaa oikeassa alareunassa.
Joten oikeassa alareunassa annetaan indeksit d miinus 1, d miinus 1.
Niin, että on init.
>> Nyt siirrymme piirtää.
Niin, piirtää tulee olemaan samanlainen minne olemme menossa kerrata
koko järjestelmässä.
Ja me vain haluamme tulostaa arvon joka on kunkin asennon hallituksen.
Joten tässä, me tulostus arvon, joka on kuhunkin asentoon hallituksen.
Ja huomaa, että me teemme -.
Ja juuri kertoo printf että riippumatta, jos se on yhden numeron tai
kaksinumeroinen luku, haluamme kuitenkin sen kestää jopa kaksi saraketta tulostaa,
niin, että jos meillä on kaksinumeroinen ja yksi luvuin samassa hallituksessa, meidän
lauta edelleen hyvältä yleinen.
>> Joten haluamme tehdä, että jokaisen arvon hallituksessa, lukuun ottamatta tyhjä.
Joten, jos asema hallituksessa vastaa tyhjä, niin me nimenomaan
haluat tulostaa vain alaviiva edustaa tyhjä, sen sijaan, että
arvosta riippumatta tyhjä todellisuudessa on.
>> Lopuksi haluamme tulostaa ulos uusi rivi.
Huomaa, että tämä on vielä sisällä ulompi silmukka, mutta sen ulkopuolella
sisempi silmukka.
Koska tämä ulompi silmukka on iteroimalla yli kaikki rivit, ja niin tämä printf on
menossa vain tulostaa uuden rivin, joten siirtyä tulostaa seuraavalle riville.
Ja se on siinä tasapeli.
>> Joten, nyt lähdetään siitä liikkua.
Nyt, ohitamme liikkua, laatta, joka Käyttäjä on merkitty peli - ne
Kirjoita laatta he haluavat siirtyä - ja sinun pitäisi palata bool, joten
joko tosi tai epätosi riippuen onko tämä siirto oli todella
voimassa - onko tämä laatta voi olla muutti välilyönti.
>> Joten tässä, me julistamme paikallinen muuttuja, tile_1 ja tile_j, jotka ovat menossa
olla samanlainen blank_i ja blank_j, paitsi se tulee seurata
asema laatta.
Nyt täällä, aiomme käyttää blank_i ja blank_j ja sanoa kunnossa, joten
tässä on tyhjä taululle.
>> Nyt on laatta yläpuolella tyhjä?
Onko laatta vasemmalla tyhjä?
Onko laatta oikealla tyhjä?
Onko laattojen alla tyhjä?
Joten, jos laatta on jossakin näistä kantoja, niin tiedämme, että laatta
voidaan siirtää osaksi tyhjää kohtaa ja aihio voidaan siirtää, jos
laatta tällä hetkellä on.
>> Joten tässä, sanomme jos aluksella asennossa blank_i miinus 1 blank_j.
Joten tämä sanoo, laatta nykyisen yläpuolella tyhjä?
Ja jos näin on, aiomme muistaa että kanta on laatta.
Laatta on sijalla blank_i miinus 1 ja blank_j.
nyt ensin, meillä on myös tämä tarkastus täällä, joten blank_i on
suurempi kuin 0.
>> Miksi haluamme tehdä niin?
No, jos aihio on ylärivissä Hallituksen, niin emme halua
katso edellä aihio laatta vuodesta ei ole mitään yläpuolella
rivi aluksella.
Näin saatat päätyä saada jotain segmentointi vika tai
ohjelma saattaa vain toimia odottamattomalla tavalla.
Niin, tämä on varmistaa, että emme katso paikoissa, jotka eivät kelpaa.
>> Nyt aiomme tehdä saman asian kaikki muut mahdolliset yhdistelmät.
Joten tässä, me etsimme alla tyhjän onko se laatta.
Ja meillä on myös varmistaa, että olemme ei alarivillä, tai muuten
ei pitäisi etsiä laatta.
Täällä aiomme katsoa vasemmalla tyhjäksi nähdä, jos se on laatta.
Ja meidän ei pitäisi katsoa vasemmalle jos olemme vasemmassa reunassa.
Ja tässä me aiomme katsoa oikeus tyhjäksi, ja meidän ei pitäisi
katsoa oikealle, jos olemme oikeanpuoleisessa sarakkeessa.
>> Joten, jos mitään näistä asioista olisi totta, se tarkoittaa, että laatta ei ollut vieressä
tyhjälle ja voimme palata vääriä.
Tilanne ei ollut pätevä.
Mutta jos yksi niistä olisi totta, sitten Tässä vaiheessa tiedämme, että tile_i ja
tile_j ovat yhtä kuin asema laatta.
Ja niin, voimme päivittää aluksella kannat tile_i ja tile_j.
Tiedämme uusi arvo on tyhjä ja että kannan blank_i
blank_j, joka oli alkuperäinen blank - tiedämme laatta on menossa
liikkua siellä.
>> Huomaa emme oikeastaan ​​tarvitse tehdä todellinen swap täällä, koska tiedämme
-arvot, jotka on lisättävä noihin kantoja.
Emme tarvitse väliaikaisia muuttujan ympärille.
>> Lopuksi, meidän täytyy muistaa, että me on meidän globaaleja muuttujia, jotka ovat
pitää kirjaa kannan aihion.
Joten haluamme päivittää aseman tyhjän olla siellä, missä laatta
alun perin oli.
Lopuksi palaamme totta, sillä siirto oli onnistunut.
Olemme onnistuneesti vaihtaa tyhjä kanssa laatta.
>> Okei, niin viime me täytyy tarkistaa wonia.
Joten, voitti samalla palauttaa bool jossa totta on menossa osoittaa, että
käyttäjä on voittanut pelin.
Ja vääriä on osoittaa, että Peli on vielä kesken.
Käyttäjä ei ole voittanut.
Niin, tämä tulee olemaan aika paljon vastakohta init, jossa init,
Muistan, me alustaa hallituksessa 15, 14, 13, 12, niin edelleen.
Kun taas voitti, haluamme tarkistaa, jos aluksella on 1, 2, 3, 4, 5, ja niin edelleen.
>> Joten, aiomme alustaa meidän Counter 1 koska sitähän alkuun
vasemmalla hallituksen pitäisi olla.
Ja sitten me aiomme silmukka koko järjestelmässä.
Katsotaanpa sivuuttaa tämän ehdon toista.
Ja tämä ehto on juuri menossa tarkastus on aluksella tässä asennossa
vastaa nykyistä laskee?
Jos näin on, inkrementoidaan laskenta siten, että seuraavaan paikkaan katsomme on yksi suurempi
kuin kannan olemme juuri nyt.
>> Niin, että miten saamme vasemmassa yläkulmassa on 1.
Inkrementoidaan laskenta 2.
Katsokaa seuraavaan kohtaan.
Onko tämä 2?
Jos näin on, inkrementoidaan laskenta 3.
Seuraava asema, on tämä 3?
Jos näin on, inkrementoidaan laskenta 4, ja niin edelleen.
Joten, jos on kanta aluksella, joka ei vastaa meidän luottaa,
Sitten haluamme palata väärä koska tarkoittaa, että on joitakin laatta, joka on
ei ole oikeassa asennossa.
>> Joten tässä, mitä tämä ehto tekee?
No, muista, että aihio on tarkoitus mennä alas oikealle.
Ja tyhjä arvo ei ehkä välttämättä ole sama arvo
laskuri, joka tulee saavuttaa oikeassa alareunassa.
Joten me nimenomaan haluat tarkistaa, jos i vastaa yhtä suuri kuin d miinus 1 ja j tasavertaisina
vastaa d miinus 1 - joka sanoo, jos me etsivät oikeassa alakulmassa
lauta - sitten me vain haluavat jatkaa.
Haluamme ohittaa tämän erityisen iterointia silmukan.
>> Ja niin, jos onnistumme saamaan läpi tämän sisäkkäisiä silmukka, se tarkoittaa, että
ei ollut laatta, joka oli väärään asentoon.
Ja rikomme ulos silmukan ja tulevat täällä, missä me voimme palata totta.
Kaikki laatat olivat oikeilla paikoillaan ja se tarkoittaa käyttäjällä on
voitti pelin.
Ja se on siinä.
Nimeni on Rob Bowden, ja tämä oli 15.