>> ROB Bowden: Hi.
Jaz sem Rob in upam, da si Igra za igro od 15 let.
Zdaj obstajajo štiri funkcije, ki jih potrebujete za izvajanje tega programa - init,
pripravi, premakniti, in zmagal.
Torej, si oglejmo init.
>> Tukaj smo videli prvo kar smo tekoč storiti, je razglasila spremenljivko
imenuje števec.
To se dogaja, da se inicijaliziranih da d-krat d minus 1.
Ne pozabite, da je d dimenzija našega odbora.
Kako pr se bo delo je, da se dogaja za ponovitev čez celotno ploščo
in bomo začeli v zgornjem levem kotu.
>> In recimo, da smo imajo 4 s 4 desko.
Torej, zgoraj levo smo reči je 15.
In potem smo le, da bo štetje po deskah, ki pravijo, 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4, in tako naprej.
Torej, zgoraj levo, pričakujemo, da bo d krat d minus 1, ki je v 4 s 4
Zadeva se bo 16 minus 1, ki je pravilno 15.
>> In zdaj tukaj, kjer bomo Ponovil skozi celotno ploščo.
In bomo nastavite vsak položaj v odbor za sedanjo vrednost
naš števec, in potem števec se dogaja za pojemanje, tako da dostavo
Stališče bomo dosegli se dogaja, da imajo Števec eno manj kot
prejšnji položaj.
Tako smo na začetku imeli 15 in pojemanje števec.
Torej bomo dodeliti 14 do Naslednji položaj, zmanjšaj števec,
in bomo dodeljena 13, in tako naprej.
>> Nenazadnje moramo ravnati, da kotiček kjer velja, če ima odbor tudi
razsežnost, nato pa samo delaš 15, 14, 13, 12, vse tja do 3, 2, 1, je
dogaja, da nas pustijo pri nerešljiv deska.
In imamo, da bi zamenjali 1 in 2.
Torej, če d mod 2 enak 0, da je kako bomo preveri
da vidim, če je še.
Če d mod 2 enak 0, potem v vrsti d minusom 1, ki je v spodnji in
Stališče d minus 2 ali stolpec d minus 2, bomo nastavite, da do 2, in
stolpec d minus 3 smo bo nastavljena na 1.
Tako, da je samo vzvratno, kjer 1 in 2, trenutno so.
>> Končno, bomo nastavite zelo spodaj desno enaka prazen, kadar
blank je hash opredeljena Na vrhu kot 0.
Torej, to ni bilo nujno potrebno, ker je ta zanka bo imela
nastavite spodnjo pravico do 0, saj Števec bo seveda dosegel 0.
Ampak to je odvisno od nas ve, da blank je zgoščen najti 0.
Če grem v program in kasneje spremeniti prazno na vrhu 100, da
je treba še veliko dela.
>> Torej, to je samo pazite, da spodaj desno je pravzaprav enaka naši
Prazna vrednost.
Končno imamo dve globalnih spremenljivk, tako prazno i ​​in j prazno, in vidimo
prijavljenemu na vrhu.
In bomo uporabili tista dva svetovna spremenljivke slediti
Položaj prazno, tako da ne bomo morali pogledati skozi celotno
svet, da bi našli prazno vsak Tokrat smo poskušali narediti potezo.
Torej položaj slepega vedno je bo začela v spodnjem desnem kotu.
Torej je desno spodaj podana z Indeksi d minus 1, d minus 1.
Torej, to je pr.
>> Zdaj gremo na pripravi.
Torej, Žreb se bo podobno kjer bomo Ponovil
preko celotne plošče.
In smo samo želite natisniti vrednost da je v vsakem položaju deske.
Tako da tukaj smo tiskate vrednost, ki je v vsakem položaju deske.
In opazili, da delamo -.
In to je samo povedal, da je printf ne glede na to, če je ena številka ali
dvomestna številka, še vedno pa želijo traja dva stolpca v izpisa,
tako da če bomo imeli dvomestno in eno mestno število v istem vozilu, naša
svet bo še vedno videti lepo in pošteno.
>> Zato smo želeli storiti, da za vsako vrednost na krovu, razen za slepi test.
Torej, če se položaj v vozilu enaka prazno, nato pa smo še posebej
želite natisniti samo podčrtaj za zastopanje prazno, namesto
Ne glede na vrednost blank dejansko je.
>> Končno, želimo natisniti iz nove linije.
Obvestilo, da je to še vedno v notranjosti zunanji zanko, vendar zunaj
notranjo zanko.
Ker je to zunanji za zanke ponavljanjem nad vsemi vrstami, zato je ta printf je
bo samo tiskanje novo vrstico, zato smo premaknete na izpisal naslednjo vrstico.
In to je to za žrebanje.
>> Torej, zdaj gremo na premakniti.
Zdaj se peljemo potezo, ploščice, da Uporabnik je vpisana v igri - da
vnesite ploščice, ki jih želijo preseliti - in boš moral vrniti bool, tako
bodisi resnična ali neresnična, odvisno od tega, ali je bila ta poteza dejansko
velja - ali je mogoče, da tile biti preselil v prazen prostor.
>> Torej, tukaj izjavljamo, lokalno spremenljivko, tile_1 in tile_j, ki se bodo
bo podobna blank_i in blank_j, razen, da se dogaja, da bi spremljali
Položaj ploščice.
Zdaj tukaj, bomo uporabili blank_i in blank_j in reči, vse v redu, tako da
tukaj je napisa na krovu.
>> Zdaj je ploščica nad prazno?
Je ploščice na levi strani prikazuje?
Je ploščica na desni strani slepega?
Je ploščica spodaj prazno?
Torej, če ploščice je v enem od teh pozicije, potem vemo, da tile
se lahko premika v praznem delu in blank se lahko premakne, kjer
ploščice trenutno je.
>> Tako da tukaj smo rekli, če svet na položaju blank_i minus 1 blank_j.
Torej, to se pravi, je ploščica nad trenutno prikazuje?
In če je tako, bomo zapomniti da je položaj ploščice.
Ploščice je na položaju blank_i minus 1 in blank_j.
Zdaj prvič, imamo tudi to preverjanje tukaj, tako da je blank_i
večji od 0.
>> Zakaj želimo to storiti?
Torej, če surovec v zgornji vrstici upravnega odbora, potem ne želimo, da se
poglej zgoraj prazno ploščice, saj nič od vrha
vrstica uprave.
To je, kako boste morda na koncu dobili nekaj podobnega segmentacije krivdi ali
vaš program lahko samo delo na nepričakovane načine.
Torej, to je zagotoviti, da ne bomo poglej v krajih, ki jih ni veljavna.
>> Zdaj bomo narediti isto stvar za vse ostale možne kombinacije.
Tako da tukaj smo iskali spodaj prazno da vidim, če je to ploščice.
In imamo tudi zagotoviti, da smo ne na spodnji vrstici, ali pa smo
ni treba iskati ploščice.
Tukaj bomo pogled na levi strani prazno, da vidim, če je ploščica.
In ne smemo gledati na levo če smo v skrajnem levem stolpcu.
In tukaj bomo iskati Pravica prazen in ne bi smeli
pogledate desno, če smo v skrajnem desnem stolpcu.
>> Torej, če bi bilo res, nobena od teh stvari, to pomeni, da ploščice ni sosednji
za slepe in se lahko vrnemo false.
Poteza ni bila veljavna.
Ampak, če bi bil eden od tistih, ki to res, potem je ta točka, vemo, da tile_i in
tile_j so enaki Položaj ploščice.
In tako smo lahko posodobite na krovu Stališča tile_i in tile_j.
Vemo, da nova vrednost bo prazno in da položaj blank_i
blank_j, ki je bil prvotno blank - vemo ploščice se bo
premaknete tja.
>> Opazili smo dejansko ne moraš narediti real swap tukaj, saj vemo,
vrednote, ki jih je treba vnesti v teh položajih.
Mi ne potrebujemo začasno spremenljivka okoli.
>> Nazadnje, ne smemo pozabiti, da smo imamo globalne spremenljivke, ki so
sledenja položaju v prazno.
Zato želimo posodobiti položaj prazno, da se, kadar strešnik
prvotno je bilo.
Končno smo vrne true, saj Akcija je bila uspešna.
Uspešno smo zamenjali prazen s ploščico.
>> Vse je v redu, tako da nazadnje smo morate preveriti zmagal.
Torej, dobil podobno vrne bool kjer Res se dogaja, kar pomeni, da
Uporabnik je zmagal igro.
In false se kaže, da Igra je še vedno tekoč.
Uporabnik še ni zmagal.
Torej, to se dogaja, da je precej nasprotje init, kjer je pr,
se spomnite, smo inicializacijo ploščo do 15, 14, 13, 12, itd.
Ker so zmagali, smo želeli preveriti, če deska je 1, 2, 3, 4, 5, in tako naprej.
>> Torej, gremo za inicializacijo naše boj proti 1, saj to je tisto vrh
levo uprave bi moral biti.
In potem gremo v zanko preko celotne plošče.
Oglejmo prezreti tega pogoja za sekundo.
In ta pogoj je le, da bo Preverjanje je plošča na tem mestu
enakovredna sedanjim šteje?
Če je tako, prirastek štetje, tako da Naslednji položaj gledamo je eden višje
od položaja smo v tem trenutku.
>> Torej, to je, kako bomo dobili levo zgoraj mora biti 1.
Prirastek štetje do 2.
Poglej na naslednje mesto.
Je to 2?
Če je tako, prirastek štetje do 3.
Naslednja poziciji je ta 3?
Če je tako, prirastek štetje do 4, in tako naprej.
Torej, če obstaja kakršen koli položaj na krovu, ki ni enak našega štetja,
Nato smo se želite vrniti false, saj da pomeni, da je nekaj ploščic, ki je
ni v pravilnem položaju.
>> Torej, tukaj je, kaj je ta pogoj delaš?
No, ne pozabite, da je prazen Morala bi iti na spodnji desni.
In vrednost slepem morda ni nujno enaka vrednosti
preprečiti, da se dogaja, da se doseže V spodnjem desnem kotu.
Zato smo še posebej želeli preveriti, če sem enaka enaka d minus 1 in j enaka
enaka d minus 1 - ki je rekel, če bomo iščete v spodnjem desnem
board - potem smo pravkar želite nadaljevati.
Želimo, da preskočite to zlasti ponovitev za zanko.
>> In tako, če bi nam uspelo priti skozi to ugnezdena za zanke, kar pomeni, da
ni ploščice, ki je v nepravilen položaj.
In smo iztrgajo iz zanke in se Tukaj, kjer se lahko vrnemo true.
Vse plošče so bile v pravilnem položaju in to pomeni, da mora uporabnik
zmagalo.
In to je to.
Moje ime je Rob Bowden, in to je bil 15.