好久不见啊,我终于更新了。
题目
poj 3984思路
最基本,典型的BFS,居然卡了我这么多天。
主要原因就是太忙(lan)。而且需要自己写个数据结构(用指针队列实现一个单向树)。好在题目给出的迷宫大小确定,可以用数组连续存储。
从程序角度讲,我写的这个程序有一个毛病,就是如果没有到终点的路,会陷入死循环。不想改了……
300K左右 空间优化留坑,日后研究- 代码
#include <cstdio>
#include <utility>
using namespace std;
int maze[5][5];
typedef pair<int ,int> P;
P res[25];
typedef struct node{
int x,y;
struct node *f;
}Node;
#define SIZE sizeof(Node)
Node que[25];
Node *head = que,*tail = que;
int nx[4]={0,0,-1,1},ny[4] = {1,-1,0,0};
void bfs()
{
int k = 1,h = 0,t = 0;
while(1){//problem:whileIMPOSSIBLE go deadloop
Node *p = head;
head = &que[++h];//delete //how to ++ cleverer?
for(int i=0;i<4;i++){
if((p->x+nx[i])>=0 && (p->x+nx[i])<5
&&(p->y+ny[i])>=0 && (p->y+ny[i])<5
&& maze[(p->x)+nx[i]][(p->y)+ny[i]]==0){
//push
que[k].f = p;
que[k].x = (p->x)+nx[i];
que[k].y = (p->y)+ny[i];
k++;
tail = &que[++t];
if(((tail->x)==4)&&((tail->y)==4)){
return;
}
}
}
}
return;//return someIMPOSSIBLE
}
int main()
{
//get maze
int k=0;
for(int i=0;i<5;i++)
for(int j=0;j<5;j++){
scanf("%d",&maze[i][j]);
que[k++].f = NULL;//init fatherNode
}
que[0].x=0;que[0].y=0;//put root
bfs();
//get coor
Node *p=tail;
int n=0;
while(p!=0){
n++;
res[n-1].first=p->x;
res[n-1].second=p->y;
p = p->f;
}
for(int i=n-1;i>=0;i--){
printf("(%d, %d)\n",res[i].first,res[i].second);
}
return 0;
}
下面加点名言警句:
觉得不加有点空。
——CaptainFar