poj_1915
来源:互联网 发布:网络综艺节目定位论文 编辑:程序博客网 时间:2024/05/24 07:38
上学期数据结构上机的时候就遇到这样的题目,但是当时因为心里畏惧就没有去做,放弃了本来可以拿到的分数~~
其实这道题目就是普通的深搜,把起始点压入队列,然后把接下来每个可以到达点的一次压进去,利用结构体里面的ans记录步数。。于是这道题就不是什么问题了。。。。
#include <iostream>#include <cstring>//#include <windows.h>#include <queue>using namespace std;struct Point{ int x,y; int ans; bool operator == ( const Point& tmp) { if(this->x == tmp.x && this->y == tmp.y) return true; else return false; }};bool visited[301][301];Point start,end;int len;bool tell(int x,int y){ if(x >= 0 && x <= len-1 && y >= 0 && y <= len-1) return true; return false;}int main(){ int t; cin >> t; while(t--) { cin >> len; cin >> start.x >> start.y; start.ans = 0; cin >> end.x >> end.y; if(start == end) { cout << 0 << endl; continue; } memset(visited,false,sizeof(visited)); queue<Point> cj; cj.push(start); visited[start.x][start.y] = true; while(!cj.empty()) { Point tmp = cj.front(); if(tell(tmp.x-1,tmp.y-2) && !visited[tmp.x-1][tmp.y-2]) { start.x = tmp.x-1; start.y = tmp.y-2; start.ans = tmp.ans + 1; cj.push(start); visited[tmp.x-1][tmp.y-2] = true; if(start == end) { cout << start.ans << endl; break; } } if(tell(tmp.x-1,tmp.y+2) && !visited[tmp.x-1][tmp.y+2]) { start.x = tmp.x-1; start.y = tmp.y+2; start.ans = tmp.ans + 1; cj.push(start); visited[tmp.x-1][tmp.y+2] = true; if(start == end) { cout << start.ans << endl; break; } } if(tell(tmp.x+1,tmp.y-2) && !visited[tmp.x+1][tmp.y-2]) { start.x = tmp.x+1; start.y = tmp.y-2; start.ans = tmp.ans + 1; cj.push(start); visited[tmp.x+1][tmp.y-2] = true; if(start == end) { cout << start.ans << endl; break; } } if(tell(tmp.x+1,tmp.y+2) && !visited[tmp.x+1][tmp.y+2]) { //cout << "OK" << endl; start.x = tmp.x+1; start.y = tmp.y+2; start.ans = tmp.ans + 1; cj.push(start); visited[tmp.x+1][tmp.y+2] = true; if(start == end) { cout << start.ans << endl; break; } } if(tell(tmp.x-2,tmp.y-1) && !visited[tmp.x-2][tmp.y-1]) { start.x = tmp.x-2; start.y = tmp.y-1; start.ans = tmp.ans + 1; cj.push(start); visited[tmp.x-2][tmp.y-1] = true; if(start == end) { cout << start.ans << endl; break; } } if(tell(tmp.x-2,tmp.y+1) && !visited[tmp.x-2][tmp.y+1]) { start.x = tmp.x-2; start.y = tmp.y+1; start.ans = tmp.ans + 1; cj.push(start); visited[tmp.x-2][tmp.y+1] = true; if(start == end) { cout << start.ans << endl; break; } } if(tell(tmp.x+2,tmp.y-1) && !visited[tmp.x+2][tmp.y-1]) { start.x = tmp.x+2; start.y = tmp.y-1; start.ans = tmp.ans + 1; cj.push(start); visited[tmp.x+2][tmp.y-1] = true; if(start == end) { cout << start.ans << endl; break; } } if(tell(tmp.x+2,tmp.y+1) && !visited[tmp.x+2][tmp.y+1]) { //cout << "LL" << endl; start.x = tmp.x+2; start.y = tmp.y+1; start.ans = tmp.ans + 1; cj.push(start); visited[tmp.x+2][tmp.y+1] = true; if(start == end) { cout << start.ans << endl; break; } //cout << "PP" << endl; } //cout << "OK" << endl; cj.pop(); } } return 0;}
- poj_1915
- [论文笔记]slope one predictors for online rating-based collaborative filtering
- Oracle包被锁定的原因分析及解决方案
- C# 获取项目当前路径
- 《代码大全》阅读笔记____[第一章] 欢迎进入软件构建的世界
- curl post上传文件的“failed creating formpost data“错误
- poj_1915
- pgsql查询所有表名
- H.264码流结构
- 菜鸟晋级必修 智能手机越狱/解锁/刷机完全教程
- SAP CRM How to Create your own BOL Object for webclient
- c#操作oracle总结
- xubuntu下给php安装curl
- C#文件读写常用类介绍
- C++的虚函数和代码结构