第十一届蓝桥第一场省赛题 走方格

   日期:2020-07-09     浏览:101    评论:0    
核心提示:走方格问题描述:在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样。从上到下依次为第 1 至第 n 行,从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下走。注意,如果行号和列号都是偶数,不能走入这一格中。问有多少种方案。输入格式输入一行包含两个整数 n,m。输出格式输出一个整数,表示答案。样例输入1:3 4样例输出12样例输入2:6 6样例输出2:0评测用例规模与约定对于所

走方格

问题描述:
在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样。从上到下依次为第 1 至第 n 行,从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下走。注意,如果行号和列号都是偶数,不能走入这一格中。问有多少种方案。
输入格式输入一行包含两个整数 n,m。
输出格式输出一个整数,表示答案。
样例输入1:
3 4
样例输出1
2
样例输入2:
6 6
样例输出2:
0
评测用例规模与约定对于所有评测用例,1 ≤ n ≤ 30, 1 ≤ m ≤ 30。

#include<stdio.h>
int count=0;//计数器 
int valid(int row,int col,int n,int m)//判断当前位置是否可行 
{if(row<n&&col<m)//保证下标不超界 
   if((row+1)%2!=0||(col+1)%2!=0)//行号和列不全为偶数
     return 1;
 return 0; 
}
void pass(int a[30][30],int row,int col,int n,int m)
{int i,j;
 if(row==n-1&&col==m-1)//递归出口
   {printf("第%d种走法:\n",++count);
    for(i=0;i<n;i++)
       {for(j=0;j<m;j++)
           printf("%d ",a[i][j]);
	    printf("\n");
	   }
	printf("\n");
    return;//结束此次递归 
   }
   //递归 
 if(valid(row+1,col,n,m))//向下
   {a[row+1][col]=1;
    pass(a,row+1,col,n,m);
    a[row+1][col]=0;//回溯 
   }
 if(valid(row,col+1,n,m))//向右
   {a[row][col+1]=1;
    pass(a,row,col+1,n,m);
    a[row][col+1]=0;
   } 
}
int main()
{int a[30][30]={0},n,m;
 a[0][0]=1;//初始化 
 scanf("%d%d",&n,&m);
 pass(a,0,0,n,m); 
 if(count)
   printf("\n一共%d种解。\n",count);
 else
   printf("\n该方格阵无解。\n");
 return 0; 
} 

运行结果:


注意:题目要求输出结果只需解的个数即可,为了方便检查解是否正确,我多加了打印路径部分。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服