రాబ్ బౌడెన్: ఎక్కువ. నేను రాబ్ ఉన్నాను, నేను ఆశిస్తున్నాము మీ 15 క్రీడకు గేమ్. ఇప్పుడు, మీరు అవసరం నాలుగు ఫంక్షన్లు ఉన్నాయి ఈ కార్యక్రమంలో అమలు - init, , డ్రా తరలించడానికి, మరియు గెలిచింది. కాబట్టి, యొక్క init చూద్దాం. ఇక్కడ, మేము ఉన్నాము మొదటి విషయం చూడండి చేయబోవడం వేరియబుల్ ఉంది కౌంటర్ అని. ఇది initialized చేస్తాడు d సార్లు d మైనస్ 1. D పరిమాణంగా గుర్తుంచుకో మా బోర్డు. ఎలా init పని అన్నారు ఏమైందా ఉంది మొత్తం బోర్డు మీద iterate మరియు మేము ఆరంభమవుతుంది చేస్తున్నారు ఎడమ ఎగువన. మరియు యొక్క కేవలం వీలు మేము ఒక 4 4 ద్వారా బోర్డు. కాబట్టి టాప్ మేము వదిలి చెప్పడానికి వెళ్ళడం 15. మరియు తర్వాత మేము లెక్కించడానికి వెళుతున్న బోర్డుల ద్వారా,, 15, 14, 13 మాట్లాడుతూ 12, 11, 10, 9, 8, 7, 6, 5, 4, అందువలన న. కాబట్టి ఎడమ, మేము d సార్లు కోరుకోవడం d మైనస్ 1, 4 ద్వారా 4 లో ఇది కేసు 16 మైనస్ అన్నారు 1, సరిగ్గా 15 ఇది. మేము వెళుతున్న ఇప్పుడు ఇక్కడ ఉంది మొత్తం బోర్డు మీద iterate. మరియు మేము లో ప్రతి స్థానం సెట్ చూడాలని ప్రస్తుత విలువ బోర్డు మా కౌంటర్, మరియు అప్పుడు కౌంటర్ అన్నారు తరుగుదల, ఆ తరువాత మేము చేరుకోవడానికి స్థానం కలిగి అన్నారు కౌంటర్ కంటే ఒక తక్కువ ఉంటుంది మునుపటి స్థానం. కాబట్టి మేము ప్రారంభంలో 15 మరియు కౌంటర్ తరుగుదల. కాబట్టి అప్పుడు మేము 14 కేటాయించి చూడాలని తదుపరి స్థానం, తరుగుదల కౌంటర్, మరియు మేము అప్పగించింది చూడాలని 13, అందువలన న. చివరకు, మేము ఆ మూలన నిర్వహించడానికి అవసరం కేసు పేరు, బోర్డు ఒక కూడా ఉంది ఉంటే పరిమాణం, అప్పుడు, 15, 14, 13 చేయడం 12, అన్ని మార్గం డౌన్ 3, 2, 1, ఉంది మాకు వదిలి వెళుతున్న ఒక unsolvable బోర్డు. మరియు మేము 1 మరియు 2 మార్పిడి ఉంటుంది. D mod 2 0 సమానం చేస్తే,, ఆ మేము తనిఖీ చూడాలని ఎలా అది కూడా ఉంది ఉంటే చూడటానికి. D mod 2 0, అప్పుడు వరుసగా d మైనస్ లో సమానం, 1, ఇది వరుసను, మరియు స్థానం d మైనస్ 2, లేదా కాలమ్ d మైనస్ 2, మేము 2 కు సెట్ అన్నారు, మరియు చేస్తున్నారు కాలమ్ d మైనస్ 3 మేము 1 సెట్ అన్నారు. అందువలన విపర్యయ చోట 1 మరియు 2 ప్రస్తుతం. చివరకు, మేము చాలా సెట్ చూడాలని కుడి దిగువన ఖాళీ సమానంగా, పేరు ఖాళీ హాష్ నిర్వచించాడు 0 గా ఎగువన. కనుక, ఆ, ఖచ్చితంగా అవసరమైన కాదు లూప్ ఈ కలిగి అన్నారు నుండి 0 దిగువ కుడి, నుండి సెట్ కౌంటర్ సహజంగా 0 చేరుకుంటుంది. కానీ తెలుసుకునేందుకు మాకు ఆధారపడుతుంది ఖాళీ ఒక 0 కనుగొనేందుకు హ్యాష్ చేశారు. నేను ఈ కార్యక్రమం లోకి వెళ్ళి ఉంటే , 100 కు ఎగువన ఖాళీ మార్పు ఇప్పటికీ పని చేయాలి. ఈ కేవలం ఖచ్చితంగా చేస్తోందా కుడి దిగువన నిజానికి సమానం మా ఖాళీ విలువ. చివరగా, మేము రెండు ప్రపంచ వేరియబుల్స్ ఉన్నాయి, నేను మరియు ఖాళీ j ఖాళీ, మరియు మేము చూడండి ఆ ఎగువన ప్రకటించింది. మరియు మేము ఆ రెండు ప్రపంచ ఉపయోగించడానికి వెళుతున్న ట్రాక్ వేరియబుల్స్ ఖాళీ స్థానం, మేము లేదు కాబట్టి మొత్తం ద్వారా చూడవలసిన అవసరం ఖాళీ ప్రతి కనుగొనేందుకు బోర్డు మేము ఒక కదలికను ప్రయత్నించండి సమయం. కాబట్టి ఖాళీ స్థానం ఉంటుంది దిగువ కుడివైపు ఆరంభమవుతుంది. కాబట్టి కుడి దిగువన ద్వారా ఇవ్వబడుతుంది సూచికలు d మైనస్ 1, d మైనస్ 1. కాబట్టి, ఆ init ఉంది. ఇప్పుడు మేము డ్రా కొనసాగండి. కాబట్టి, డ్రా ఉండాలని అన్నారు మేము iterate వెళుతున్న మొత్తం బల్లపై. మరియు మేము విలువ ప్రింట్ మీరు బోర్డు ప్రతి స్థానంలో. ఇక్కడ, మేము ఆ విలువ ప్రింటింగ్ బోర్డు ప్రతి స్థానంలో. మరియు మేము చేస్తున్న గమనించవచ్చు -. మరియు కేవలం printf చెప్పుచున్నారు ఆ సంబంధం లేకుండా అది ఒక అంకెల లేదా అయితే యొక్క రెండు అంకెల సంఖ్య, మేము ఇంకా దానికి కావలసిన , ప్రింట్ లో రెండు నిలువు చేపట్టారు కాబట్టి మేము రెండు అంకెల మరియు ఒకటి ఉంటే ఒకే బోర్డు లో మృతి మా బోర్డు ఇప్పటికీ nice మరియు చదరపు కనిపిస్తుంది. కాబట్టి మేము ప్రతి విలువ కోసం అలా అనుకుంటే బోర్డు, ఖాళీ తప్ప. కాబట్టి, బోర్డు లో స్థానం సమానం ఖాళీ, అప్పుడు మేము ప్రత్యేకంగా కేవలం ఒక తక్కువగా ప్రింట్ మీరు ఖాళీ ప్రాతినిధ్యం, బదులుగా ఏ విలువ ఖాళీ నిజానికి ఉంది. చివరకు, మేము ప్రింట్ మీరు ఒక కొత్త లైన్. ఈ లోపల ఇప్పటికీ అని గమనించండి బయట లూప్ బాహ్య, కానీ లూప్ అంతర్గత. లూప్ ఈ బాహ్య iterating నుండి అన్ని వరుసలు పైగా, మరియు ఈ printf ఉంది ఒక కొత్త లైన్ ప్రింట్ అన్నారు మేము తదుపరి వరుస ప్రింట్ కొనసాగండి. మరియు ఆ డ్రా కోసం ఇది. కాబట్టి, ఇప్పుడు యొక్క తరలించడానికి వెళ్దాం. ఇప్పుడు, మేము, టైల్ తరలింపు పాస్ యూజర్ ఆటలో ఎంటర్ ఉంది - వారు వారు తరలించడానికి మీరు టైల్ ఎంటర్ - మరియు మీరు ఒక bool తిరిగి అనుకునేవారు కాబట్టి చేస్తున్నారు నిజమైన లేదా తప్పుడు, బట్టి ఎత్తుగడల నిజానికి అని చెల్లుబాటు అయ్యే - ఆ టైల్ ఉంటుంది అని ఖాళీ స్థలం లోకి తరలించబడింది. ఇక్కడ, మేము ఒక స్థానిక వేరియబుల్, tile_1 మరియు వెళ్లే ఇది tile_j, blank_i మరియు blank_j లాంటిదే, ఇది ట్రాక్ వెళుతున్న తప్ప టైల్ యొక్క స్థానం. ఇప్పుడు ఇక్కడ, మేము blank_i ఉపయోగించడానికి వెళుతున్న మరియు blank_j అందువలన, అన్ని కుడి చెప్పటానికి ఇక్కడ బోర్డు ఖాళీ ఉంది. ఇప్పుడు, ఖాళీ పైన టైల్ ఉంది? ఖాళీ ఎడమ టైల్ ఉంది? ఖాళీ కుడి టైల్ ఉంది? ఖాళీ క్రింద టైల్ ఉంది? కాబట్టి, టైల్ వారిలో ఏ లో ఉంటే స్థానాలు, అప్పుడు మేము తెలిసిన టైల్ ఖాళీ స్పాట్ లోకి తరలించబడింది మరియు చేయవచ్చు ఖాళీ తరలించబడలేదు పేరు టైల్ ఉంది. ఇక్కడ, మేము చెప్పుకోవాలంటే స్థానంలో బోర్డు blank_i మైనస్ 1 blank_j. కాబట్టి ఈ అని టైల్ ఉంది ప్రస్తుత ఖాళీ పైన? మరియు అలా అయితే, మేము గుర్తు చేస్తున్నారు ఆ పలక యొక్క స్థానం. టైల్ స్థానం blank_i లో ఉంది మైనస్ 1 మరియు blank_j. ఇప్పుడు మొదటి, మేము కూడా ఈ తనిఖీ ఇక్కడే, కాబట్టి blank_i ఉంది 0 కన్నా ఎక్కువ. ఎందుకు మేము అలా అనుకుంటున్నారు? బాగా, ఖాళీ టాప్ వరుసగా ఉంటే బోర్డు, అప్పుడు మేము వద్దు నుండి టైల్ కోసం ఖాళీ పైన చూడండి పైన ఏమీ లేదు బోర్డు వరుసగా. ఈ మీరు పొందడానికి ముగుస్తుంది ఎలా ఉంది విభజన లోపంగా లేదా లాగ మీ కార్యక్రమం కేవలం పనిచేయవచ్చు ఊహించని మార్గాల్లో. కాబట్టి, ఈ మేము లేదు చూసుకోవాలి ఉంది చెల్లవు ప్రదేశాలలో చూడండి. ఇప్పుడు మేము కోసం ఇదే చూడాలని అన్ని ఇతర సాధ్యమైన కలయికల. ఇక్కడ, మేము ఖాళీ క్రింద చూస్తున్నారా ఆ టైల్ లేదో. మరియు మేము కూడా మేము చేసుకోవాలి కాదు వరుసను న, లేదంటే టైల్ కోసం చూడరాదని. ఇక్కడ, మేము ఎడమ యొక్క చూడండి చూడాలని ఇది టైల్ ఉంటే ఖాళీ చూడటానికి. మరియు మేము ఎడమ చూడరాదని మేము ఎడమవైపున కాలమ్ లో అయితే. మరియు ఇక్కడ మేము చూడండి చూడాలని కుడి ఖాళీ, మరియు మేము కాదు మేము అయితే కుడి చూడండి కుడివైపు కాలమ్ లో. కాబట్టి, ఆ ఊహలు నిజమైన ఉంటే, ఆ టైల్ ప్రక్కనే కాదు అర్థం ఖాళీ మరియు మేము తప్పుడు తిరిగి రావచ్చు. తరలింపు చెల్లదు. కానీ, ఆ ఒకటి నిజమైన ఉంటే, అప్పుడు ఈ పాయింట్, మేము ఆ tile_i తెలిసిన మరియు tile_j సమానం టైల్ యొక్క స్థానం. కాబట్టి, మేము బోర్డు నవీకరించవచ్చు స్థానాలు tile_i మరియు tile_j. మేము కొత్త విలువ ఖాళీగా ఉంటుంది తెలుసు మరియు ఆ స్థానం blank_i blank_j, అసలు ఇది ఖాళీ - మేము టైల్ అన్నారు తెలుసు అక్కడ తరలించడానికి. మేము నిజంగా లేదు గమనించండి ఒక ఇక్కడ రియల్ స్వాప్, మేము తెలిసిన నుండి చొప్పించడానికి అవసరమైన విలువలు ఆ స్థానాలు లోకి. మేము ఒక తాత్కాలిక అవసరం లేదు చుట్టూ వేరియబుల్. చివరగా, మేము ఆ మేము గుర్తు అవసరం మా ప్రపంచ వేరియబుల్స్ ఉన్నాయి స్థానం పర్యవేక్షించడం ఖాళీ. కాబట్టి మేము స్థానం నవీకరించాలనుకున్న పేరు టైల్ ఉండాలి ఖాళీ మొదట. చివరకు, మేము నుండి నిజమైన తిరిగి తరలింపు విజయవంతమైంది. మేము విజయవంతంగా మార్పిడి టైల్ ఖాళి. అన్ని కుడి, గోలగా వన్ తనిఖీ చెయ్యాలి. కాబట్టి, గెలిచింది అదేవిధంగా ఒక bool తిరిగి నిజమైన సూచించడానికి అన్నారు యూజర్ గేమ్ గెలుచుకుంది. మరియు తప్పుడు సూచిస్తూ ఆ ఆట ఇప్పటికీ అన్నారు. యూజర్ గెలుచుకున్నారు లేదు. కాబట్టి, ఈ చాలా చక్కని అన్నారు init వ్యతిరేకం, పేరు init, మేము బోర్డు, ప్రారంభించడం గుర్తు అందువలన న 15, 14, 13, 12, కు. గెలిచింది అయితే, మేము తనిఖీ అనుకుంటే బోర్డు న 1, 2, 3, 4, 5, మరియు ఉంది. కాబట్టి, మేము ప్రారంభించడం వెళుతున్న మా ఏ టాప్ నుండి 1 వరకు ఎదుర్కోవడానికి బోర్డు ఎడమ ఉండాలి. మరియు తర్వాత మేము లూప్ చూడాలని మొత్తం బల్లపై. యొక్క ఈ పరిస్థితి విస్మరించండి లెట్ రెండవ కోసం. మరియు ఈ పరిస్థితి కేవలం అన్నారు చెక్ ఈ స్థానం వద్ద బోర్డు ఉంది ప్రస్తుత గణనలు సమానంగా? అలా అయితే, మొత్తం పెంచడం కాబట్టి మేము చూడండి తదుపరి స్థానం ఒకటి ఎక్కువ మేము ప్రస్తుతం ఉన్నాయి స్థానం కంటే. కాబట్టి మేము ఎంత ఎడమ 1 ఉండాలి. 2 మొత్తం పెంచడం. తదుపరి స్థానం చూడండి. ఈ 2 ఉంది? అలా అయితే, 3 మొత్తం పెంచడం. తదుపరి స్థానం, ఈ 3? అలా అయితే, మొత్తం పెంచడం 4, మరియు అందువలన న. కాబట్టి, ఏ స్థానం ఉంది మా మొత్తం సమానంగా లేదు బోర్డుయొక్క తర్వాత ఆ నుండి తప్పుడు తిరిగి అనుకుంటున్నారా అని కొందరు టైల్ ఉంది అంటే కాదు సరైన స్థానంలో. ఇక్కడ, ఈ పరిస్థితి ఏమి ఉంది? బాగా, ఖాళీ అని గుర్తుంచుకోండి కుడి దిగువన వెళ్ళి కోరుకుంటున్నాము. మరియు ఖాళీ యొక్క విలువ కాదు తప్పనిసరిగా విలువ సమానంగా ఆ చేరుకోవచ్చు అన్నారు ఎదుర్కోవడానికి దిగువ కుడివైపు. కాబట్టి మేము ప్రత్యేకంగా తనిఖీ అనుకుంటే నేను సమానం d మైనస్ 1 మరియు j సమానం సమానం d మైనస్ 1 సమానం - అని ఇది మేము కుడి దిగువన యొక్క చూస్తున్నారు బోర్డు - తర్వాత మేము కొనసాగించాలని మీరు. మేము ఈ ప్రత్యేక వెళ్ళకండి కోసం లూప్ ఏ మళ్ళా. కాబట్టి, మేము ఈ ద్వారా పొందగలిగేతే లూప్ యున్న, అని లో ఏ టైల్ ఉంది తప్పు స్థానం. మరియు మేము లూప్ బయటకు మరియు రాబోయే ఇక్కడ, మేము నిజమైన తిరిగి. అన్ని పలకలు సరైన స్థానాల్లో ఉన్నాయి యూజర్ కలిగి ఉంటుంది నెగ్గింది. అంతే. నా పేరు రాబ్ బౌడెన్, మరియు ఈ 15 ఉంది.