欢è¿å³æ³¨å¤©åæºè½ï¼æ们æ¯ä¸æ³¨äºåä¸æºè½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