- 简单的邮递计划
- 2017-07-11 20:39:42 @
原题意
邮政货车
【题目描述】vans.pas
郊区呈矩形,有N(N<=3)条东西方向的街道和M(M<=126)条南北方向的街道.在交区的西北角有一个邮局。
如N=3,M=4 时,郊区如右图所示,圆点表示邮局,直线表示街道。
每天邮政卡车从邮局出发,每个交叉路口(包括边界和四角)经过且只经过一次,最终回到邮局。现在邮局希望知道邮政货车不同的行驶路线共有几种。
【输入文件】 vans.in
一行,包括两个数字N和M。输入数据保证货车一定能够完成任务并回到邮局。
【输出文件】vans.out
一个数字,为邮政货车不同行驶路线的数量。
【输入输出样例】
vans.in vans.out
运行超时的代码...
#include <stdio.h>
#include <stdlib.h>
using namespace std;
static const int cols = 1000;
int psize=0;
//路径数组,可行的方法,坐标,经过的节点
void getTotle(int a[4][1000],int &totle,int x,int y,int num){
if(num<psize){
a[x][y] = 1;
num++;
//向上
if(x>0&&a[x-1][y]==0){
getTotle(a,totle,x-1,y,num);
a[x-1][y] = 0;
}
//向右
if(y<psize/4-1&&a[x][y+1]==0){
getTotle(a,totle,x,y+1,num);
a[x][y+1] = 0;
}
//向下
if(x<3&&a[x+1][y]==0){
getTotle(a,totle,x+1,y,num);
a[x+1][y] = 0;
}
//向左
if(y>0&&a[x][y-1]==0){
getTotle(a,totle,x,y-1,num);
a[x][y-1] = 0;
}
}else{
//最后一个节点为(0,0)
if(x==0&&y==0){
totle++;
}
}
}
int main()
{
int totle = 0,col = 0;
scanf("%d",&col);
psize = 4*col;
int path[4][cols];
//初始化坐标数组
getTotle(path,totle,0,1,1);
printf("%d",totle*2);
return 0;
}
0 条评论
目前还没有评论...