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.