poj1915 - Knight Moves
2017-03-09 23:39
225 查看
题目链接:点击打开链接
题意:
一个n*n棋盘,有一只马,马能走8个方向,问是否能从点st,到达点ed。
写法:
水题,bfs。
总结:
在我的专题训练小结里点击打开链接
代码:
题意:
一个n*n棋盘,有一只马,马能走8个方向,问是否能从点st,到达点ed。
写法:
水题,bfs。
总结:
在我的专题训练小结里点击打开链接
代码:
#include <iostream> #include <cstring> #include <cstdio> #include <queue> #include <cstdlib> using namespace std; struct node { int x, y, cost; node(int x, int y, int cost):x(x), y(y), cost(cost){} }; bool vis[300+5][300+5]; int n, T; node st(0, 0, 0), ed(0, 0, 0); const int dx[8] = {1, 2, 2, 1, -1, -2, -2, -1}; const int dy[8] = {2, 1, -1, -2, -2, -1, 1, 2}; inline bool check(int x, int y){ return (0<=x && x<n && 0<=y && y<n && !vis[x][y]); } int bfs(){ queue<node> q; st.cost = 0; q.push(st); memset(vis, 0, sizeof(vis)); vis[st.x][st.y] = true; while(!q.empty()){ node tmp = q.front(); q.pop(); if(tmp.x==ed.x && tmp.y==ed.y) return tmp.cost; for(int i=0; i<8; ++i){ int tx = dx[i] + tmp.x; int ty = dy[i] + tmp.y; int tc = tmp.cost + 1; if(check(tx, ty)){ q.push(node(tx, ty, tc)); vis[tx][ty] = true; } } } } int main(){ scanf("%d", &T); while(T--){ scanf("%d%d%d%d%d", &n, &st.x, &st.y, &ed.x, &ed.y); printf("%d\n", bfs()); } return 0; }
相关文章推荐
- chapter05-Knight Moves(Poj 1915)
- [POJ1915 Knight Moves]
- bfs入门题 poj 1915 knight moves
- POJ 1915 Knight Moves BFS
- poj-1915-Knight Moves(广搜)
- POJ 1915-Knight Moves (单向BFS && 双向BFS 比较)
- [POJ]1915 Knight Moves
- poj 1915 Knight Moves(BFS)
- poj 1915 Knight Moves
- POJ 1915 Knight Moves(BFS)
- POJ 1915 Knight Moves
- POJ - 1915 Knight Moves
- POJ 1915 Knight Moves bfs || 双向bfs
- POJ 1915 Knight Moves (广度搜索)
- OpenJudge/Poj 1915 Knight Moves
- poj 1915 Knight Moves
- poj1915 Knight Moves(bfs)
- POJ 1915 Knight Moves 双向搜索
- poj 1915 Knight Moves(bfs)
- [poj 1915] Knight Moves [A*][DBFS 双向BFS]