Algorithm --> 棋盘中求出A到B的最小步数
2015-09-07 11:20
483 查看
[b]求出A到B的最小步数[/b]
给定象棋盘,以及位置A和B, 求出从A到B的最小步数
Input
2 -->case 个数
9 9 -->棋盘大小
3 5 2 8 --> 起始位置
20 20
2 3 7 9
Output
2
5
代码:
输入文件:
给定象棋盘,以及位置A和B, 求出从A到B的最小步数
Input
2 -->case 个数
9 9 -->棋盘大小
3 5 2 8 --> 起始位置
20 20
2 3 7 9
Output
2
5
代码:
#include <cstdio> #include <iostream> #include <string.h> using namespace std; #define MAX 1000 //八个方向 int o[8][2] = { { 1, 2 }, { 1, -2 }, { -1, 2 }, { -1, -2 }, { -2, -1 }, { -2, 1 }, { 2, -1 }, { 2, 1 } }; int R, C; int _sX, _sY, _eX, _eY; //起始坐标 int graph[MAX][MAX]; int Answer; void DFS( int sX, int sY, int cnt ) { if( sX < 1 || sX > R || sY < 1 || sY > C ) { return; } if( sX == _eX && sY == _eY ) { if( Answer > cnt ) //求取最小步数 Answer { Answer = cnt; } } if( graph[sX][sY] == 0 || graph[sX][sY] > cnt ) //当前格子没走或者值比cnt大,取较小值 { graph[sX][sY] = cnt; for( int i = 0; i < 8; i++ ) { DFS( sX + o[i][0], sY + o[i][1], cnt + 1 ); } } } int main( int argc, char** argv ) { int tc, T; freopen( "input_chess.txt", "r", stdin ); cin >> T; for( tc = 0; tc < T; tc++ ) { memset( graph, 0, sizeof( graph ) ); cin >> R >> C; cin >> _sX >> _sY >> _eX >> _eY; graph[_sX][_sY] = 1; Answer = MAX; DFS( _sX, _sY, 0 ); cout << Answer << endl; } return 0; }
输入文件:
5 10 10 1 1 10 10 20 20 2 3 7 9 30 30 2 15 29 29 40 40 2 3 1 40 45 45 40 10 27 40
相关文章推荐
- Algorithm --> 求N以内的真分数个数
- django给admin增加功能
- 悟空:用Go语言编写的全文搜索引擎
- 类别 category 以及类扩展
- 认识理解zygote
- 【哥德巴赫猜想】POJ Goldbach's Conjecture 2262
- django中给ajax提交加上csrf
- 【哥德巴赫猜想】LightOJ Goldbach`s Conjecture 1259
- Uva 11292 The Dragon of Loowater
- Intent中的四个重要属性——Action、Data、Category、Extras
- leetcode: (121) Best Time to Buy and Sell Stock
- 分类(category)
- django for windows
- hdu 1056 HangOver
- 【英语】Bingo口语笔记(69) - 脏话的表达
- POJ-2195 Going Home
- 【英语】Bingo口语笔记(68) - come系列
- Django开发教程 第一节 HelloWorld
- golang-beego的使用
- hdu 4722 Good Numbers(找规律,记忆化搜索,数位dp)