[a982. 迷宮問題#1](https://zerojudge.tw/ShowProblem?problemid=a982) ```python= def bfs(): queue = [(1, 1, 1)] bol[1][1] = 0 while queue: x, y, steps = queue.pop(0) if x == n - 2 and y == n - 2: return steps for i in range(4): nx, ny = x + dx[i], y + dy[i] if 0 <= nx < n and 0 <= ny < n and z[nx][ny] == "." and bol[nx][ny] == 1: bol[nx][ny] = 0 queue.append((nx, ny, steps + 1)) return "No solution!" n = int(input()) z = [list(input().strip()) for _ in range(n)] bol = [[1 if z[i][j] == "." else 0 for j in range(n)] for i in range(n)] dx = [0, 1, -1, 0] dy = [1, 0, 0, -1] print(bfs()) ``` 計算路徑延伸需回朔 ```python= def bfs(): queue = [(1, 1, 1)] bol[1][1] = 0 parents = {} while queue: x, y, steps = queue.pop(0) if x == n - 2 and y == n - 2: results = [(x,y)] cur = parents[(x,y)] while cur: results.append(cur) cur = parents.get(cur) results.reverse() return steps,results for i in range(4): nx, ny = x + dx[i], y + dy[i] if 0 <= nx < n and 0 <= ny < n and z[nx][ny] == "." and bol[nx][ny] == 1: bol[nx][ny] = 0 parents[(nx,ny)] = (x,y) queue.append((nx, ny, steps + 1)) return "No solution!" n = int(input()) z = [list(input().strip()) for _ in range(n)] bol = [[1 if z[i][j] == "." else 0 for j in range(n)] for i in range(n)] dx = [0, 1, -1, 0] dy = [1, 0, 0, -1] a,b = bfs() print(a) for i in b: print(i) ``` [a597. 祖靈被榨乾了!!!!!!!!](https://zerojudge.tw/ShowProblem?problemid=a597) ```python= n, m = map(int,input().split()) z = [] for i in range(n): z.append(list(input())) bol = [[1 if z[i][j] == "J" else 0 for j in range(m)] for i in range(n)] def bfs(x,y): dx = [0, 1, -1, 0] dy = [1, 0, 0, -1] queue = [(x, y)] area = 1 bol[x][y] = 0 while queue: x, y = queue.pop(0) for i in range(4): nx, ny = x + dx[i], y + dy[i] if 0 <= nx < n and 0 <= ny < m and bol[nx][ny] == 1: bol[nx][ny] = 0 queue.append((nx, ny)) area += 1 return area ma = 0;ans = 0 for i in range(n): for j in range(m): if z[i][j] == "J" and bol[i][j] == 1: ma = max(ma,bfs(i,j)) ans += 1 print(ans,ma) ``` [#T1212. LETTERS](https://oj.qiaosicode.com/p/T1212) ```python= n, m = map(int,input().split()) z = [] for i in range(n): z.append(list(input())) def bfs(x,y): dx = [0, 1, -1, 0] dy = [1, 0, 0, -1] queue = [(x, y)] se = [z[x][y]] area = 1 while queue: print(se) x, y = queue.pop(0) for i in range(4): nx, ny = x + dx[i], y + dy[i] if 0 <= nx < n and 0 <= ny < m and z[nx][ny] not in se: se.append(z[nx][ny]) queue.append((nx, ny)) area += 1 return area print(bfs(0,0)) ``` [#T1199. 全排列](https://blog.csdn.net/fight_andy/article/details/136141005) ```python= z = [] def dfs(ls,start,end): global z if start >= end: z.append(ls.copy()) else: for i in range(start,end+1): ls[start] ,ls[i] = ls[i],ls[start] dfs(ls,start+1,end) ls[start] ,ls[i] = ls[i],ls[start] n = input() dfs(list(n),0,len(n)-1) for i in z: print(*i) ``` [#T1215. 迷宫](https://blog.csdn.net/lan_in/article/details/136993666?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-136993666-blog-126461074.235%5Ev43%5Epc_blog_bottom_relevance_base2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-136993666-blog-126461074.235%5Ev43%5Epc_blog_bottom_relevance_base2&utm_relevant_index=1) ```python= n = int(input()) z = [] for i in range(n): z.append(list(input())) bol = [[1 for j in range(n)] for i in range(n)] dx = [0, 1, -1, 0] dy = [1, 0, 0, -1] for i in range(n): for j in range(n): if z[i][j] == ".": bol[i][j] = "0" a, b, c, d = map(int,input().split()) def dfs(x,y,c,d): queue = [[x,y]] bol[x][y] = 1 while queue: x,y = queue.pop(0) if x == c and y == d: return "YES" for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0 <= nx < n and 0 <= ny < n and z[nx][ny] == "." and bol[nx][ny] == "0": queue.append([nx,ny]) bol[nx][ny] = 1 return "NO" print(dfs(a,b,c,d)) ``` 八皇后問題 ```python= ans = [0] * 10 su = 0 def out(): z = [] for i in range(1,9): z.append(ans[i]) print(z) def is_safe(n, k): for i in range(1, n): #不能在同一直線 #水平距離 之前的水平列減去當前的水平列 if ans[i] == k or abs(ans[i] - k) == abs(n - i): return False #垂直距離 當前行減之前垂直行的點 return True def dfs(n): if n == 9: # 當 n 等於 9 時,表示已經放置了 8 個皇后 out() return for i in range(1, 9): if is_safe(n, i): # 第n行第i列放上旗子 ans[n] = i dfs(n + 1) ans[n] = 0 dfs(1) ``` 輸出有幾塊不同的區域 5 5 AABBB AABBB CCCCC CCBBB BBBBB ```python= dx = [1,-1,0,0] dy = [0,0,1,-1] def dfs(x,y,k): bol[x][y] = 0 queue = [[x,y]] ans = 1 while queue: xx,yy = queue.pop(0) for i in range(4): nx = xx + dx[i] ny = yy + dy[i] if 0 <= nx < n and 0 <= ny < m and z[nx][ny] == k and bol[nx][ny] == 1: bol[nx][ny] = 0 ans += 1 queue.append([nx,ny]) return 1 n,m = map(int,input().split()) z = [] bol = [[1 for i in range(m)]for i in range(n)] for i in range(n): z.append(list(input())) ans = 0; for i in range(n): for j in range(m): if bol[i][j] == 1: dfs(i,j,z[i][j]) ans += 1 print(ans) ```