[Sicily 1153 马的周游问题] 优化思想:改变搜索顺序
来源:互联网 发布:java不换行 编辑:程序博客网 时间:2024/05/01 10:14
#include<iostream> #include<vector>//1153马的周游问题:(优化基本思想)先搜索可行格较少的格子 #include<algorithm> using namespace std;const int SIZE = 65;int visited[SIZE];int route[SIZE];int cnt_size[SIZE];int dx[8] = {-1, -2, -2, -1, 1, 2, 2, 1};int dy[8] = {-2, -1, 1, 2, -2, -1, 1, 2};vector<int> neighbors[SIZE];//neighbors[i][j]记录的是马可以从i到j bool cmp(int x, int y){return cnt_size[x] < cnt_size[y];}int get_child_size(int child){int size = 0;for(int i = 0; i < neighbors[child].size(); i++){if(!visited[neighbors[child][i]]) size++;}return size;}void get_children(int x, vector<int> &children){ for(int i = 0; i < neighbors[x].size(); i++) { int child = neighbors[x][i]; if(!visited[child]) { children.push_back(child); cnt_size[child] = get_child_size(child); } } sort(children.begin(), children.end(), cmp);//排序,可行格较少的排在前面 }void print_route(){ for(int i = 1; i < SIZE - 1; i++) cout << route[i] << " "; cout << route[SIZE - 1] << endl;}bool dfs(int x, int depth){ route[depth] = x;//route[]记录路径 if(depth == (SIZE - 1)) { print_route(); return true; } visited[x] = 1; vector<int> children;//存放x点的还未被visit的neighbors get_children(x, children); for(int i = 0; i < children.size(); i++) { if(dfs(children[i], depth + 1))//如果某一个点可以继续搜下去,就返回true return true; //如果不能继续搜下去,就搜索下一个children } visited[x] = false;//如果这个点的所有children都搜索不下去,则回溯 return false;}int main(){ int start;//马的起点为start,范围是1到64 while(cin >> start && start != -1) { //初始化 for(int i = 0; i < SIZE; i++) visited[i] = 0; for(int i = 0; i < SIZE; i++) neighbors[i].clear(); for(int i = 1; i < SIZE; i++) { int row = (i + 7) / 8;//计算i点在第几行 int column = i - (row - 1)* 8;//计算i点在第几列 for(int j = 0; j < 8; j++)//对于每一个i点,计算出它的neighbors { int nx = row + dx[j]; int ny = column + dy[j]; if(nx >= 1 && nx <= 8 && ny >=1 && ny <= 8) neighbors[i].push_back((nx - 1) * 8 + ny); } } dfs(start, 1); } return 0;}
0 0
- [Sicily 1153 马的周游问题] 优化思想:改变搜索顺序
- Sicily 1153 马的周游问题(DFS深度优先搜索)
- sicily 1153 马的周游问题
- Sicily 1153 马的周游问题
- sicily 1153 马的周游问题
- Sicily 1153 马的周游问题
- Sicily 1153 马的周游问题[Special judge] && sicily 1152
- Sicily马周游问题
- Sicily 1153 马的周游问题[Speical judge]
- sicily 1152 简单的马周游问题
- Sicily 1152 简单的马周游问题
- sicily 1152 简单的马周游问题
- sicily 1152.简单的马周游问题
- sicily 1153.马的周游问题
- Sicily 1152.简单的马周游问题
- Sicily 1152. 简单的马周游问题
- Sicily 1153. 马的周游问题
- Sicily 1152 简单的马周游问题
- 机器人驾驶的神经网络愿景(上)
- 南宁在哪里治疗大便出血最好
- uva 10859 Placing Lampposts,树形dp
- 编译ffmpeg 2.6.3 h264
- typeof(),__typeof__(),__typeof()
- [Sicily 1153 马的周游问题] 优化思想:改变搜索顺序
- 南宁看大便出血在哪里看最好
- 南宁大便出血需要做什么检查
- U-Boot常用命令
- servlet简介绍
- 南宁治疗便秘哪个技术最先进
- 南宁肛肠科最较权威的是哪家
- 移动(android、IOS)App服务器开发入门:第一个json
- 南宁肛门瘙痒有哪些方法治疗