首页 > 代码库 > Sicily 1936. Knight Moves
Sicily 1936. Knight Moves
题目地址:1936. Knight Moves
思路:
这道题一开始不理解题意…orz...囧,看大神们理解的。
题意是说一个8*8的国际象棋,骑士以马的形式走动(“日”字型),指定两个点,输出最小的步骤。
可以利用广度搜索解决。
具体代码如下:
1 #include <iostream> 2 #include <queue> 3 #include <cstring> 4 #include <string> 5 using namespace std; 6 7 int dx[] = {-1, -2, -2, -1, 1, 2, 2, 1}; //可以走八个方向 8 int dy[] = {-2, -1, 1, 2, 2, 1, -1, -2}; 9 10 bool visited[100];11 12 int main() {13 int t;14 cin >> t;15 while (t--) {16 memset(visited, false, sizeof(visited));17 int distance[100] = {0};18 19 string node1, node2;20 cin >> node1 >> node2;21 22 int X = (node1[0]-‘a‘)*8 + node1[1]-‘1‘;23 int Y = (node2[0]-‘a‘)*8 + node2[1]-‘1‘;24 25 queue<int> store;26 store.push(X);27 while (!store.empty()) {28 if (store.front() == Y)29 break;30 31 int x = store.front()/8;32 int y = store.front()%8;33 34 for (int i = 0; i < 8; i++) {35 int nx = x+dx[i];36 int ny = y+dy[i];37 38 if (nx < 0||nx > 7||ny < 0||ny > 7)39 continue;40 int temp = nx*8 + ny;41 42 if (!visited[temp]) {43 store.push(temp);44 visited[temp] = true;45 distance[temp] = distance[store.front()] + 1;46 }47 }48 store.pop();49 }50 cout << "To get from " << node151 << " to " << node2 << " takes "52 << distance[Y] << " knight moves.\n";53 }54 55 return 0;56 }57
Sicily 1936. Knight Moves
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。