回溯走迷宫


#include<iostream>
#include"LinkedStack.cpp"
using namespace std;

class Point{
public:
int x;
int y;
public:
Point():x(0),y(0){}
Point(int i,int j):x(i),y(j){}
};

template<typename T>
int fun(int (*a)[10],int i,int j,LinkedStack<T>& sk)
{
int cx,cy;
Point p(0,0);
for(int x=1;x>=-1;--x){
for(int y=1;y>=-1;--y){
cx = x+i;
cy = y+j;
if((x==0&&y==0)||cx<0||cy<0||cx>9||cy>9)
continue;
if(*(*(a+cx)+cy)==0){
p = Point(cx,cy);
sk.Push(p);
*(*(a+cx)+cy)=1;
if(cx==9&&cy==9)
return 1;
if(fun(a,cx,cy,sk)){
return 1;
}
}
}
}
sk.Pop(p);
return 0;
}

int main()
{
LinkedStack<Point> sk;
int a[10][10]={
1,1,1,1,0,1,1,1,1,1,
0,1,1,0,1,1,0,0,0,1,
1,0,0,1,0,1,1,0,0,1,
1,1,1,0,1,1,1,1,0,1,
1,1,1,0,1,0,1,0,1,1,
1,1,1,0,0,1,0,1,1,1,
1,1,0,1,1,1,0,1,1,1,
1,1,1,0,1,1,0,1,1,1,
1,1,1,1,1,1,1,0,0,1,
1,1,1,1,1,1,1,1,1,0
};
Point pStart(1,1);
sk.Push(pStart);
fun(a,1,0,sk);
while(not sk.IsEmpty()){
sk.Pop(pStart);
cout << "[" << pStart.x << "," << pStart.y << "] ";
}
cout << endl;
}

[9,9] [8,8] [8,7] [7,6] [6,6] [5,6] [4,5] [5,4] [4,3] [3,3] [2,2] [2,1] [1,1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值