一个机器人可以前后左右移动,问移动N次有多少种路径;
如移动一次可以前后左右移动有4种路径;注意:每条路径中不会有每个地方只能走一次;
一个很简单的深搜题,比较基础; 假设机器人最多移动15次,int就可以啦,移动16次就要long long了
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#define MAX 50000+5
using namespace std;
bool book[100*100][100*100]; //标记该地点是否被走过,100*100的地图;
int cnt=0; //记录路径的数目;
int N; //机器人移动的次数;
int next[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; //前后左右移动;
void dsf(int x, int y, int step){ //深搜核心代码;
if(step==N){ //如果走了N步就return;
cnt++;
return;
}
book[x][y]=1; //标记走过的路径;
int k=4;
int tx, ty;
for(k=0; k<=3; k++){
tx=x+next[k][0];
ty=y+next[k][1];
if(book[tx][ty]==0){ //判断是否走过;
book[tx][ty]=1;
dsf(tx,ty,step+1);
book[tx][ty]=0; //消除标记;不可缺少;
}
}
}
int main(){
while(scanf("%d",&N),N){
memset(book, 0, sizeof(book));
book[15][15]=1;
cnt=0;
dsf(15, 15, 0);
printf("%d\n",cnt);
}
return 0;
}