【算法趣题】Q08 优秀的扫地机器人

欢è¿å³æ³¨å¤©åæºè½ï¼æ们æ¯ä¸æ³¨äºåä¸æºè½BIï¼äººå·¥æºè½AIï¼å¤§æ°æ®åæä¸ææé¢åçåç´ç¤¾åºï¼å­¦ä¹ ï¼é®ç­ãæ±èä¸ç«å¼æå®ï¼

对åä¸æºè½BIã大æ°æ®åæææãæºå¨å­¦ä¹ ï¼pythonï¼Rç­æ°æ®é¢åæå´è¶£çåå­¦å å¾®ä¿¡ï¼tsaieduï¼å¹¶æ³¨ææ¶æ¯æ¥æºï¼é请你è¿å¥æ°æ®ç±å¥½è交æµç¾¤ï¼æ°æ®ç±å¥½è们é½å¨è¿å¿ã


å¼è¨

ãç®æ³è¶£é¢ãæ¯æ¥èªå¾çµç¨åºè®¾è®¡ä¸ä¹¦ç»äºè¯çãç¨åºåçç®æ³è¶£é¢ãï¼ä¹¦ä¸­æ¯ç¨Rubyå®ç°çãè¿éæ¯ç¨pythonæ¥å®ç°ã

é®é¢æè¿°

ç°å¨æå¾å¤å¶é åé½å¨åæ«å°æºå¨äººï¼å¯æ¯è¿äºæºå¨äººææ¶åä¼åå¤æ¸æ«æä¸ä¸ªå°æ¹ãå设æä¸æ¬¾æºå¨äººä¸ä¼åå¤æ¸æ«åä¸ä¸ªå°æ¹ï¼å®åªè½ååå·¦å³ç§»å¨ã举个ä¾å­ï¼å¦æ第1次åå移å¨ï¼é£ä¹è¿ç»­ç§»å¨3次æ¶ï¼å°±ä¼æ以ä¸9ç§æåµï¼è§å¾ï¼ãåå ä¸ºç¬¬1次移å¨å¯ä»¥æ¯ååå·¦å³4ç§æåµï¼æ以移å¨3次æ¶å¨é¨è·¯å¾æ 9 * 4 = 36 ç§ãé£ä¹æ±è¿ä¸ªæºå¨äººç§»å¨12次æ¶ï¼æå¤å°ç§ç§»å¨è·¯å¾ï¼ï¼P029ï¼

æè·¯

ç¨åæ (0,0)表示æåçä½ç½®ï¼python中ç¨[0,0]表示ãåååå·¦å³ç移å¨åå«è¡¨ç¤ºä¸º[0, 1], [0, -1], [-1, 0], [1, 0]ã

è®°trace为移å¨è·¯å¾çå表ï¼å³ä¸å¾ç¬¬1æ¡ç§»å¨è·¯å¾è¡¨ç¤ºä¸ºtrace=[[0, 0], [0, -1], [0, -2], [0, -3]]ï¼å¾ä¸­æåä¸æ¡ç§»å¨è·¯å¾è¡¨ç¤ºä¸ºtrace=[[0, 0], [0, -1], [-1, -1], [-2, -1]]ã

åå¦å两次ç移å¨è·¯å¾æ¯trace=[[0, 0], [0, -1], [0, -2]]ï¼é£ä¹ç¬¬ä¸æ¬¡ç§»å¨æ3ç§æåµï¼åå«æ¯ä¸å¾ä¸­(1)ã(2)ã(3)è¿ä¸ç§æåµãå¦ä½æ¥å¤æ­å¢ï¼

移å¨æ¹å¼æoperator = [[0, 1], [0, -1], [-1, 0], [1, 0]]ï¼ç¬¬3次移å¨ä»»éä¸ç§ï¼æ¯ä¸ç§é½æå¯è½ï¼è¿éå°±éè¦éåäºï¼ã

å设第3次移å¨æ¹å¼éæ©[0,1]å³åä¸ç§»å¨ï¼ä¸æ¬¡(è¿éæ¯ç¬¬2次)移å¨å°ä½ç½®æ¯trace[-1]å³è¿éæ¯[0,-2]ãé£ä¹ç¬¬ä¸æ¬¡ç§»å¨åçä½ç½®ä¸º[0+0,-2+1]å³[0,-1]ï¼èè¿ä¸ªä½ç½®å¨trace中已ç»åå«äºï¼å æ­¤ç¬¬3次ç移å¨éæ©[0,1]ä¸åéã

å¦æ第3次移å¨æ¹å¼éæ©[0,-1]å³åä¸ç§»å¨ï¼ä¸æ¬¡(è¿éæ¯ç¬¬2次)移å¨å°ä½ç½®æ¯trace[-1]å³è¿éæ¯[0,-2]ãé£ä¹ç¬¬ä¸æ¬¡ç§»å¨åçä½ç½®ä¸º[0+0,-2-1]å³[0,-3]ï¼èè¿ä¸ªä½ç½®ä¸å¨trace中ï¼å æ­¤ç¬¬3次ç移å¨å¯ä»¥éæ©[0,-1]ï¼è¿æ ·æ°çtrace就为new_trace=[[0, 0], [0, -1], [0, -2],[0,-3]]ï¼å³ä¸å¾ä¸­ç(1)ã

åæ ·å¦æ第3次移å¨æ¹å¼éæ©[-1,0]å³å左移å¨ï¼ä¸æ¬¡(è¿éæ¯ç¬¬2次)移å¨å°ä½ç½®æ¯trace[-1]å³è¿éæ¯[0,-2]ãé£ä¹ç¬¬ä¸æ¬¡ç§»å¨åçä½ç½®ä¸º[0-1,-2+0]å³[-1,-2]ï¼èè¿ä¸ªä½ç½®ä¹ä¸å¨trace中ï¼å æ­¤ç¬¬3次ç移å¨ä¹å¯ä»¥éæ©[-1,0]ï¼è¿æ ·æ°çtrace就为new_trace=[[0, 0], [0, -1], [0, -2],[-1,-2]]ï¼å³ä¸å¾ä¸­ç(3)ã

åæ ·å¦æ第3次移å¨æ¹å¼éæ©[1,0]å³åå³ç§»å¨ï¼ä¸æ¬¡(è¿éæ¯ç¬¬2次)移å¨å°ä½ç½®æ¯trace[-1]å³è¿éæ¯[0,-2]ãé£ä¹ç¬¬ä¸æ¬¡ç§»å¨åçä½ç½®ä¸º[0+1,-2+0]å³[1,-2]ï¼èè¿ä¸ªä½ç½®ä¹ä¸å¨trace中ï¼å æ­¤ç¬¬3次ç移å¨ä¹å¯ä»¥éæ©[1,0]ï¼è¿æ ·æ°çtrace就为new_trace=[[0, 0], [0, -1], [0, -2],[1,-2]]ï¼å³ä¸å¾ä¸­ç(2)ã

è¿æ ·ï¼æ符åæ¡ä»¶ç移å¨è·¯å¾æ¾å¥ä¸ä¸ªå表trace_listsï¼ç­ç§»å¨éåå®ä¹åtrace_listså°±åå«äºææ满足æ¡ä»¶ç移å¨è·¯å¾äºã

python3å®ç°

def move(trace,operator,n): # trace为移å¨è·¯å¾ï¼operator为移å¨æ¹å¼ï¼n表示è¿ç»­ç§»å¨n次ã   

 if len(trace) == n + 1:  # éå½çè·³åºæ¡ä»¶ï¼å¦ætraceçé¿åº¦æ»¡è¶³äºn次移å¨åï¼åç»æ        

return 1   

last = trace[-1]    

for i in range(len(operator)):# éåæ¯æ¬¡ç移å¨æ¹å¼Â        

next_oper = operator[i]       

 next_place = [j+k for j,k in zip(last, next_oper)] # è·åå½æ¬¡ç§»å¨åçä½ç½®Â        

if next_place not in trace:            # å¦æå½æ¬¡ç§»å¨åçä½ç½®ä¸å¨å½æ¬¡ç§»å¨ä¹åç移å¨è·¯å¾ï¼å该次移å¨ç¬¦åè¦æ±ï¼çææ°ç移å¨è·¯å¾new_traceï¼è¿è¡ä¸ä¸æ¬¡ç§»å¨Â            

new_trace = trace.copy()            

new_trace.append(next_place)            

 if(len(new_trace) == n + 1):                

global trace_lists                

trace_lists.append(new_trace)            

move(new_trace,operator,n)

å½è¿ç»­ç§»å¨3次æ¶ï¼å±æ36ç§ç§»å¨è·¯å¾ã

è¦çå·ä½ç§»å¨è·¯å¾ï¼åªéè¾åºtrace_listså³å¯

é£ä¹è¿ä¸ªæºå¨äººç§»å¨12次æ¶ï¼æå¤å°ç§ç§»å¨è·¯å¾ï¼

å³æ324932ç§ã


æç« æ¥æºï¼å¤©åæºè½ç¤¾åº

ä½èï¼è®¸èå©https://ask.hellobi.com/publish/article/11372

猜你喜欢

转载自blog.csdn.net/r3ee9y2oefcu40/article/details/80436142
今日推荐