<style> html, body, .ui-content { background: #222222; color: #00BFFF; } /* 設定 code 模板 */ .markdown-body code, .markdown-body tt { background-color: #ffffff36; } .markdown-body .highlight pre, .markdown-body pre { color: #ddd; background-color: #00000036; } .hljs-tag { color: #ddd; } .token.operator { background-color: transparent; } /* 設定連結 */ a, .open-files-container li.selected a { color: #89FFF8; } a:hover, .open-files-container li.selected a:hover { color: #89FFF890; } </style> ###### tags: `Leetcode` # 909. Snakes and Ladders ###### Link : https://leetcode.com/problems/snakes-and-ladders/description/ ## 題目 回傳由起點走到終點的最短路徑 ## 程式碼 I ```cpp= class Solution { public: int snakesAndLadders(vector<vector<int>>& board) { const int n = board.size(), end = pow(n, 2); vector<int> Board; Board.push_back(0); for(int i = n-1, j = 0;i >= 0;i--, j++){ if(j & 1) Board.insert(Board.end(), board[i].rbegin(), board[i].rend()); else Board.insert(Board.end(), board[i].begin(), board[i].end()); } vector<int> dist(n * n + 1, -1); queue<int> Queue; dist[1] = 0; Queue.push(1); while(!Queue.empty()){ int cur = Queue.front(); Queue.pop(); for(int j = 1;j <= 6;j++){ if(cur + j > end) break; int dest = (Board[cur + j] == -1)?cur + j:Board[cur + j]; if(dist[dest] == -1){ dist[dest] = dist[cur] + 1; Queue.push(dest); } } } return dist[end]; } }; ``` ## Date 2023/1/24