Catch That Cow
题目传送:POJ - 3278 - Catch That Cow
题解:点击即传送
迷宫问题
题目传送:POJ - 3984 - 迷宫问题
DFS也可以,见另一个题解
AC代码(BFS):
#include <map>
#include <set>
#include <cmath>
#include <deque>
#include <queue>
#include <stack>
#include <cstdio>
#include <cctype>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define INF 0x7fffffff
using namespace std;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
int front, rear;
struct node {
int x, y, pre;
}q[105];
int mp[5][5];
int vis[5][5];
void print(int x) {
if(q[x].pre != -1) {
print(q[x].pre);
printf("(%d, %d)\n", q[x].x, q[x].y);
}
}
void bfs(int x, int y) {
front = 0;
rear = 1;
q[front].x = x;
q[front].y = y;
q[front].pre = -1;
vis[x][y] = 1;
while(front < rear) {
for(int i = 0; i < 4; i ++) {
int xx = q[front].x + dx[i];
int yy = q[front].y + dy[i];
if(xx >= 0 && xx < 5 && yy >= 0 && yy < 5 && mp[xx][yy] != 1 && !vis[xx][yy]) {
vis[xx][yy] = 1;
q[rear].x = xx;
q[rear].y = yy;
q[rear].pre = front;
rear ++;
}
if(xx == 4 && yy == 4) {
print(front);
return;
}
}
front ++;//出队
}
}
int main() {
memset(vis, 0, sizeof(vis));
for(int i = 0; i< 5; i ++) {
for(int j = 0; j < 5; j ++) {
scanf("%d", &mp[i][j]);
}
}
printf("(0, 0)\n");
bfs(0, 0);
printf("(4, 4)\n");
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-29 13:01:04