1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> ROB Bowden: Hi. 3 00:00:13,715 --> 00:00:17,800 Jaz sem Rob in upam, da si Igra za igro od 15 let. 4 00:00:17,800 --> 00:00:22,040 Zdaj obstajajo štiri funkcije, ki jih potrebujete za izvajanje tega programa - init, 5 00:00:22,040 --> 00:00:24,650 pripravi, premakniti, in zmagal. 6 00:00:24,650 --> 00:00:27,230 Torej, si oglejmo init. 7 00:00:27,230 --> 00:00:32,930 >> Tukaj smo videli prvo kar smo tekoč storiti, je razglasila spremenljivko 8 00:00:32,930 --> 00:00:34,600 imenuje števec. 9 00:00:34,600 --> 00:00:37,620 To se dogaja, da se inicijaliziranih da d-krat d minus 1. 10 00:00:37,620 --> 00:00:40,200 Ne pozabite, da je d dimenzija našega odbora. 11 00:00:40,200 --> 00:00:43,840 Kako pr se bo delo je, da se dogaja za ponovitev čez celotno ploščo 12 00:00:43,840 --> 00:00:46,050 in bomo začeli v zgornjem levem kotu. 13 00:00:46,050 --> 00:00:48,570 >> In recimo, da smo imajo 4 s 4 desko. 14 00:00:48,570 --> 00:00:51,220 Torej, zgoraj levo smo reči je 15. 15 00:00:51,220 --> 00:00:53,960 In potem smo le, da bo štetje po deskah, ki pravijo, 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, in tako naprej. 17 00:00:58,510 --> 00:01:03,780 Torej, zgoraj levo, pričakujemo, da bo d krat d minus 1, ki je v 4 s 4 18 00:01:03,780 --> 00:01:08,290 Zadeva se bo 16 minus 1, ki je pravilno 15. 19 00:01:08,290 --> 00:01:10,885 >> In zdaj tukaj, kjer bomo Ponovil skozi celotno ploščo. 20 00:01:10,885 --> 00:01:14,720 In bomo nastavite vsak položaj v odbor za sedanjo vrednost 21 00:01:14,720 --> 00:01:19,090 naš števec, in potem števec se dogaja za pojemanje, tako da dostavo 22 00:01:19,090 --> 00:01:22,300 Stališče bomo dosegli se dogaja, da imajo Števec eno manj kot 23 00:01:22,300 --> 00:01:23,690 prejšnji položaj. 24 00:01:23,690 --> 00:01:26,970 Tako smo na začetku imeli 15 in pojemanje števec. 25 00:01:26,970 --> 00:01:30,065 Torej bomo dodeliti 14 do Naslednji položaj, zmanjšaj števec, 26 00:01:30,065 --> 00:01:33,710 in bomo dodeljena 13, in tako naprej. 27 00:01:33,710 --> 00:01:37,620 >> Nenazadnje moramo ravnati, da kotiček kjer velja, če ima odbor tudi 28 00:01:37,620 --> 00:01:44,450 razsežnost, nato pa samo delaš 15, 14, 13, 12, vse tja do 3, 2, 1, je 29 00:01:44,450 --> 00:01:46,780 dogaja, da nas pustijo pri nerešljiv deska. 30 00:01:46,780 --> 00:01:49,390 In imamo, da bi zamenjali 1 in 2. 31 00:01:49,390 --> 00:01:52,930 Torej, če d mod 2 enak 0, da je kako bomo preveri 32 00:01:52,930 --> 00:01:54,410 da vidim, če je še. 33 00:01:54,410 --> 00:01:59,810 Če d mod 2 enak 0, potem v vrsti d minusom 1, ki je v spodnji in 34 00:01:59,810 --> 00:02:05,430 Stališče d minus 2 ali stolpec d minus 2, bomo nastavite, da do 2, in 35 00:02:05,430 --> 00:02:07,860 stolpec d minus 3 smo bo nastavljena na 1. 36 00:02:07,860 --> 00:02:12,170 Tako, da je samo vzvratno, kjer 1 in 2, trenutno so. 37 00:02:12,170 --> 00:02:16,270 >> Končno, bomo nastavite zelo spodaj desno enaka prazen, kadar 38 00:02:16,270 --> 00:02:20,700 blank je hash opredeljena Na vrhu kot 0. 39 00:02:20,700 --> 00:02:26,785 Torej, to ni bilo nujno potrebno, ker je ta zanka bo imela 40 00:02:26,785 --> 00:02:30,610 nastavite spodnjo pravico do 0, saj Števec bo seveda dosegel 0. 41 00:02:30,610 --> 00:02:34,610 Ampak to je odvisno od nas ve, da blank je zgoščen najti 0. 42 00:02:34,610 --> 00:02:38,280 Če grem v program in kasneje spremeniti prazno na vrhu 100, da 43 00:02:38,280 --> 00:02:39,770 je treba še veliko dela. 44 00:02:39,770 --> 00:02:43,180 >> Torej, to je samo pazite, da spodaj desno je pravzaprav enaka naši 45 00:02:43,180 --> 00:02:44,870 Prazna vrednost. 46 00:02:44,870 --> 00:02:50,270 Končno imamo dve globalnih spremenljivk, tako prazno i ​​in j prazno, in vidimo 47 00:02:50,270 --> 00:02:53,360 prijavljenemu na vrhu. 48 00:02:53,360 --> 00:02:56,270 In bomo uporabili tista dva svetovna spremenljivke slediti 49 00:02:56,270 --> 00:02:59,040 Položaj prazno, tako da ne bomo morali pogledati skozi celotno 50 00:02:59,040 --> 00:03:03,890 svet, da bi našli prazno vsak Tokrat smo poskušali narediti potezo. 51 00:03:03,890 --> 00:03:08,450 Torej položaj slepega vedno je bo začela v spodnjem desnem kotu. 52 00:03:08,450 --> 00:03:13,270 Torej je desno spodaj podana z Indeksi d minus 1, d minus 1. 53 00:03:13,270 --> 00:03:14,880 Torej, to je pr. 54 00:03:14,880 --> 00:03:17,040 >> Zdaj gremo na pripravi. 55 00:03:17,040 --> 00:03:19,370 Torej, Žreb se bo podobno kjer bomo Ponovil 56 00:03:19,370 --> 00:03:20,970 preko celotne plošče. 57 00:03:20,970 --> 00:03:25,400 In smo samo želite natisniti vrednost da je v vsakem položaju deske. 58 00:03:25,400 --> 00:03:29,580 Tako da tukaj smo tiskate vrednost, ki je v vsakem položaju deske. 59 00:03:29,580 --> 00:03:32,280 In opazili, da delamo -. 60 00:03:32,280 --> 00:03:37,410 In to je samo povedal, da je printf ne glede na to, če je ena številka ali 61 00:03:37,410 --> 00:03:42,010 dvomestna številka, še vedno pa želijo traja dva stolpca v izpisa, 62 00:03:42,010 --> 00:03:46,290 tako da če bomo imeli dvomestno in eno mestno število v istem vozilu, naša 63 00:03:46,290 --> 00:03:49,450 svet bo še vedno videti lepo in pošteno. 64 00:03:49,450 --> 00:03:54,190 >> Zato smo želeli storiti, da za vsako vrednost na krovu, razen za slepi test. 65 00:03:54,190 --> 00:03:58,260 Torej, če se položaj v vozilu enaka prazno, nato pa smo še posebej 66 00:03:58,260 --> 00:04:01,730 želite natisniti samo podčrtaj za zastopanje prazno, namesto 67 00:04:01,730 --> 00:04:05,150 Ne glede na vrednost blank dejansko je. 68 00:04:05,150 --> 00:04:08,500 >> Končno, želimo natisniti iz nove linije. 69 00:04:08,500 --> 00:04:11,970 Obvestilo, da je to še vedno v notranjosti zunanji zanko, vendar zunaj 70 00:04:11,970 --> 00:04:13,200 notranjo zanko. 71 00:04:13,200 --> 00:04:17,930 Ker je to zunanji za zanke ponavljanjem nad vsemi vrstami, zato je ta printf je 72 00:04:17,930 --> 00:04:22,130 bo samo tiskanje novo vrstico, zato smo premaknete na izpisal naslednjo vrstico. 73 00:04:22,130 --> 00:04:23,910 In to je to za žrebanje. 74 00:04:23,910 --> 00:04:27,770 >> Torej, zdaj gremo na premakniti. 75 00:04:27,770 --> 00:04:32,590 Zdaj se peljemo potezo, ploščice, da Uporabnik je vpisana v igri - da 76 00:04:32,590 --> 00:04:36,360 vnesite ploščice, ki jih želijo preseliti - in boš moral vrniti bool, tako 77 00:04:36,360 --> 00:04:39,300 bodisi resnična ali neresnična, odvisno od tega, ali je bila ta poteza dejansko 78 00:04:39,300 --> 00:04:43,360 velja - ali je mogoče, da tile biti preselil v prazen prostor. 79 00:04:43,360 --> 00:04:48,340 >> Torej, tukaj izjavljamo, lokalno spremenljivko, tile_1 in tile_j, ki se bodo 80 00:04:48,340 --> 00:04:52,150 bo podobna blank_i in blank_j, razen, da se dogaja, da bi spremljali 81 00:04:52,150 --> 00:04:54,910 Položaj ploščice. 82 00:04:54,910 --> 00:05:00,370 Zdaj tukaj, bomo uporabili blank_i in blank_j in reči, vse v redu, tako da 83 00:05:00,370 --> 00:05:01,930 tukaj je napisa na krovu. 84 00:05:01,930 --> 00:05:04,420 >> Zdaj je ploščica nad prazno? 85 00:05:04,420 --> 00:05:06,210 Je ploščice na levi strani prikazuje? 86 00:05:06,210 --> 00:05:07,420 Je ploščica na desni strani slepega? 87 00:05:07,420 --> 00:05:08,970 Je ploščica spodaj prazno? 88 00:05:08,970 --> 00:05:13,330 Torej, če ploščice je v enem od teh pozicije, potem vemo, da tile 89 00:05:13,330 --> 00:05:16,390 se lahko premika v praznem delu in blank se lahko premakne, kjer 90 00:05:16,390 --> 00:05:18,240 ploščice trenutno je. 91 00:05:18,240 --> 00:05:26,400 >> Tako da tukaj smo rekli, če svet na položaju blank_i minus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Torej, to se pravi, je ploščica nad trenutno prikazuje? 93 00:05:31,120 --> 00:05:34,350 In če je tako, bomo zapomniti da je položaj ploščice. 94 00:05:34,350 --> 00:05:37,870 Ploščice je na položaju blank_i minus 1 in blank_j. 95 00:05:37,870 --> 00:05:40,660 Zdaj prvič, imamo tudi to preverjanje tukaj, tako da je blank_i 96 00:05:40,660 --> 00:05:41,760 večji od 0. 97 00:05:41,760 --> 00:05:43,410 >> Zakaj želimo to storiti? 98 00:05:43,410 --> 00:05:47,290 Torej, če surovec v zgornji vrstici upravnega odbora, potem ne želimo, da se 99 00:05:47,290 --> 00:05:51,240 poglej zgoraj prazno ploščice, saj nič od vrha 100 00:05:51,240 --> 00:05:52,430 vrstica uprave. 101 00:05:52,430 --> 00:05:55,950 To je, kako boste morda na koncu dobili nekaj podobnega segmentacije krivdi ali 102 00:05:55,950 --> 00:05:59,030 vaš program lahko samo delo na nepričakovane načine. 103 00:05:59,030 --> 00:06:04,310 Torej, to je zagotoviti, da ne bomo poglej v krajih, ki jih ni veljavna. 104 00:06:04,310 --> 00:06:08,470 >> Zdaj bomo narediti isto stvar za vse ostale možne kombinacije. 105 00:06:08,470 --> 00:06:13,250 Tako da tukaj smo iskali spodaj prazno da vidim, če je to ploščice. 106 00:06:13,250 --> 00:06:16,950 In imamo tudi zagotoviti, da smo ne na spodnji vrstici, ali pa smo 107 00:06:16,950 --> 00:06:18,910 ni treba iskati ploščice. 108 00:06:18,910 --> 00:06:25,040 Tukaj bomo pogled na levi strani prazno, da vidim, če je ploščica. 109 00:06:25,040 --> 00:06:27,860 In ne smemo gledati na levo če smo v skrajnem levem stolpcu. 110 00:06:27,860 --> 00:06:30,100 In tukaj bomo iskati Pravica prazen in ne bi smeli 111 00:06:30,100 --> 00:06:33,340 pogledate desno, če smo v skrajnem desnem stolpcu. 112 00:06:33,340 --> 00:06:37,820 >> Torej, če bi bilo res, nobena od teh stvari, to pomeni, da ploščice ni sosednji 113 00:06:37,820 --> 00:06:39,640 za slepe in se lahko vrnemo false. 114 00:06:39,640 --> 00:06:41,230 Poteza ni bila veljavna. 115 00:06:41,230 --> 00:06:47,010 Ampak, če bi bil eden od tistih, ki to res, potem je ta točka, vemo, da tile_i in 116 00:06:47,010 --> 00:06:50,540 tile_j so enaki Položaj ploščice. 117 00:06:50,540 --> 00:06:55,210 In tako smo lahko posodobite na krovu Stališča tile_i in tile_j. 118 00:06:55,210 --> 00:06:59,820 Vemo, da nova vrednost bo prazno in da položaj blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, ki je bil prvotno blank - vemo ploščice se bo 120 00:07:02,950 --> 00:07:04,030 premaknete tja. 121 00:07:04,030 --> 00:07:07,610 >> Opazili smo dejansko ne moraš narediti real swap tukaj, saj vemo, 122 00:07:07,610 --> 00:07:09,850 vrednote, ki jih je treba vnesti v teh položajih. 123 00:07:09,850 --> 00:07:13,780 Mi ne potrebujemo začasno spremenljivka okoli. 124 00:07:13,780 --> 00:07:16,920 >> Nazadnje, ne smemo pozabiti, da smo imamo globalne spremenljivke, ki so 125 00:07:16,920 --> 00:07:18,980 sledenja položaju v prazno. 126 00:07:18,980 --> 00:07:22,780 Zato želimo posodobiti položaj prazno, da se, kadar strešnik 127 00:07:22,780 --> 00:07:24,190 prvotno je bilo. 128 00:07:24,190 --> 00:07:27,680 Končno smo vrne true, saj Akcija je bila uspešna. 129 00:07:27,680 --> 00:07:31,110 Uspešno smo zamenjali prazen s ploščico. 130 00:07:31,110 --> 00:07:34,890 >> Vse je v redu, tako da nazadnje smo morate preveriti zmagal. 131 00:07:34,890 --> 00:07:39,900 Torej, dobil podobno vrne bool kjer Res se dogaja, kar pomeni, da 132 00:07:39,900 --> 00:07:41,460 Uporabnik je zmagal igro. 133 00:07:41,460 --> 00:07:43,780 In false se kaže, da Igra je še vedno tekoč. 134 00:07:43,780 --> 00:07:46,340 Uporabnik še ni zmagal. 135 00:07:46,340 --> 00:07:52,100 Torej, to se dogaja, da je precej nasprotje init, kjer je pr, 136 00:07:52,100 --> 00:07:56,920 se spomnite, smo inicializacijo ploščo do 15, 14, 13, 12, itd. 137 00:07:56,920 --> 00:08:03,000 Ker so zmagali, smo želeli preveriti, če deska je 1, 2, 3, 4, 5, in tako naprej. 138 00:08:03,000 --> 00:08:06,600 >> Torej, gremo za inicializacijo naše boj proti 1, saj to je tisto vrh 139 00:08:06,600 --> 00:08:08,400 levo uprave bi moral biti. 140 00:08:08,400 --> 00:08:10,860 In potem gremo v zanko preko celotne plošče. 141 00:08:10,860 --> 00:08:13,690 Oglejmo prezreti tega pogoja za sekundo. 142 00:08:13,690 --> 00:08:18,410 In ta pogoj je le, da bo Preverjanje je plošča na tem mestu 143 00:08:18,410 --> 00:08:20,790 enakovredna sedanjim šteje? 144 00:08:20,790 --> 00:08:27,040 Če je tako, prirastek štetje, tako da Naslednji položaj gledamo je eden višje 145 00:08:27,040 --> 00:08:29,690 od položaja smo v tem trenutku. 146 00:08:29,690 --> 00:08:32,700 >> Torej, to je, kako bomo dobili levo zgoraj mora biti 1. 147 00:08:32,700 --> 00:08:33,950 Prirastek štetje do 2. 148 00:08:33,950 --> 00:08:35,010 Poglej na naslednje mesto. 149 00:08:35,010 --> 00:08:35,690 Je to 2? 150 00:08:35,690 --> 00:08:37,659 Če je tako, prirastek štetje do 3. 151 00:08:37,659 --> 00:08:39,179 Naslednja poziciji je ta 3? 152 00:08:39,179 --> 00:08:42,440 Če je tako, prirastek štetje do 4, in tako naprej. 153 00:08:42,440 --> 00:08:49,190 Torej, če obstaja kakršen koli položaj na krovu, ki ni enak našega štetja, 154 00:08:49,190 --> 00:08:52,640 Nato smo se želite vrniti false, saj da pomeni, da je nekaj ploščic, ki je 155 00:08:52,640 --> 00:08:55,490 ni v pravilnem položaju. 156 00:08:55,490 --> 00:08:58,810 >> Torej, tukaj je, kaj je ta pogoj delaš? 157 00:08:58,810 --> 00:09:02,170 No, ne pozabite, da je prazen Morala bi iti na spodnji desni. 158 00:09:02,170 --> 00:09:06,180 In vrednost slepem morda ni nujno enaka vrednosti 159 00:09:06,180 --> 00:09:11,080 preprečiti, da se dogaja, da se doseže V spodnjem desnem kotu. 160 00:09:11,080 --> 00:09:15,760 Zato smo še posebej želeli preveriti, če sem enaka enaka d minus 1 in j enaka 161 00:09:15,760 --> 00:09:19,470 enaka d minus 1 - ki je rekel, če bomo iščete v spodnjem desnem 162 00:09:19,470 --> 00:09:22,050 board - potem smo pravkar želite nadaljevati. 163 00:09:22,050 --> 00:09:26,200 Želimo, da preskočite to zlasti ponovitev za zanko. 164 00:09:26,200 --> 00:09:31,250 >> In tako, če bi nam uspelo priti skozi to ugnezdena za zanke, kar pomeni, da 165 00:09:31,250 --> 00:09:34,690 ni ploščice, ki je v nepravilen položaj. 166 00:09:34,690 --> 00:09:38,900 In smo iztrgajo iz zanke in se Tukaj, kjer se lahko vrnemo true. 167 00:09:38,900 --> 00:09:41,800 Vse plošče so bile v pravilnem položaju in to pomeni, da mora uporabnik 168 00:09:41,800 --> 00:09:43,230 zmagalo. 169 00:09:43,230 --> 00:09:44,460 In to je to. 170 00:09:44,460 --> 00:09:46,550 Moje ime je Rob Bowden, in to je bil 15. 171 00:09:46,550 --> 00:09:52,726