du熊机器人(C语言)

du熊正在玩一个别人刚送给它的机器人。这个机器人只能在一个棋盘中行走,棋盘的左上角格子为(0, 0),右下角格子为(X, Y)。

du熊控制这个机器人从棋盘的左上角,走到右下角,再从右下角回到左上角。当机器人从左上角走到右下角的过程中,如果它当前所在格子为(x, y),则它只能走到(x+1, y)或(x, y+1)的格子;当机器人从右下角走回左上角的过程中,如果它当前所在的格子为(x, y),则它只能走到(x-1, y)或(x, y-1)的格子。并且du熊要求机器人从左上角走到右下角再走回左上角的整个过程中,最多经过同一个格子一次。

请你帮du熊计算出这个机器人一共有多少种不同的路线。

-------------------------------------------------------------------------------------------------------------------------------

暂时棋盘设为三行三列,总体思路就是先往终点走,走过的路标设为1。若到达了终点,就往起点走,走过的路设为2。


#include <stdio.h>
/*
	allX :棋盘X总个数
	allY :棋盘Y总个数
	arr[][] :棋盘数组
	sum : 总方法个数 
*/
int allX=3;
int allY=3;
int arr[3][3];
int sum=0;

bool isNextToEnd(int x,int y);
void toEnd(int x,int y);
bool isNextToStart(int x,int y);
void toStart(int x,int y);

int main(){
	toEnd(0,0);
	printf("从左上角走到右下角再走回左上角,总共路线有:%d种\n",sum) ;
} 


/*
	isNextToEnd(int x,int y) :是否能走这一步,即是否可以走到arr[x][y] ,这里是往终点走 
	toEnd(int x,int y) :迭代走下一步,一直到终点
*/
bool isNextToEnd(int x,int y){
	if(x>=allX||y>=allY)return false;
	return true;
}
void toEnd(int x,int y){
	//如果已经走到终点,就往回走 
	if(x==allX-1&&y==allY-1){
		toStart(x,y);
		return;
	}
	//先走右边
	if(isNextToEnd(x,y+1)){
		arr[x][y+1]=1;
		toEnd(x,y+1);
		arr[x][y+1]=0; 
	}
	//再走下边 
	if(isNextToEnd(x+1,y)){
		arr[x+1][y]=1;
		toEnd(x+1,y);
		arr[x+1][y]=0;
	}
}


/*
	isNextToStart(int x,int y) :是否可以走到arr[x][y],这里是往起点走
	toStart(int x,int y) :迭代走下一步,一直到起点 
*/
bool isNextToStart(int x,int y){
	if(x<0||y<0||arr[x][y]==1)return false;
	return true;
}
void toStart(int x,int y){
	if(x==0&&y==0){
		 
		sum++;
		
		printf("此时sum为 %d\n",sum); 
		
		for(int i=0;i<allX;i++){
			for(int j=0;j<allY;j++)
				printf("%d\t",arr[i][j]);
			printf("\n");	
		}
		printf("\n");
		printf("-----------------------\n") ;
		return; 
	}
	//先走左边 
	if(isNextToStart(x,y-1)){
		arr[x][y-1]=2;
		toStart(x,y-1);
		arr[x][y-1]=0;
	}
	//再走上边 
	if(isNextToStart(x-1,y)){
		arr[x-1][y]=2;
		toStart(x-1,y);
		arr[x-1][y]=0;
	}
}
这个是运行结果:


此时sum为 1
2       1       1
2       0       1
2       2       1
-----------------------
此时sum为 2
2       1       1
2       2       1
0       2       1
-----------------------
此时sum为 3
2       1       0
2       1       1
2       2       1
-----------------------
此时sum为 4
2       2       2
1       1       2
0       1       1
-----------------------
此时sum为 5
2       2       0
1       2       2
1       1       1
-----------------------
此时sum为 6
2       2       2
1       0       2
1       1       1
-----------------------
从左上角走到右下角再走回左上角,总共路线有:6种

猜你喜欢

转载自blog.csdn.net/ranandrun/article/details/79736177