#include <stdio.h>
int a[21][21]={0},count=0,m,n;
int main()
{
int x,y;
void search(int x,int y);
scanf("%d%d%d%d",&m,&n,&x,&y);
a[x][y]=1;
a[x-1][x-2]=1; //將不能經過的點的值設為1
a[x-1][x+2]=1;
a[x-2][x+1]=1;
a[x-2][x-1]=1;
a[x+1][x+2]=1;
a[x+1][x-2]=1;
a[x+2][x+1]=1;
a[x+2][x-1]=1;
search(0,0);
printf("%d\n",count); //輸出從(0,0)點到達(m,n)點的路數
}
void search(int x,int y)
{
if(x>m||y>n) return ; //如果x>m或者y>n結束搜索
if(x==m&&y==n) {count++;return ;} //如果到達(m,n)這點的話次數加1
if(a[x][y+1]!=1) search(x,y+1); //如果右方可以走的話向右搜索
if(a[x+1][y]!=1) search(x+1,y); //如果下方可以走的話向下搜索
}
我感覺方法應該是沒錯的,每次向右向下就好了,為什么和答案對不上
uj5u.com熱心網友回復:
下標有機會越界;你輸入的y用得有點少。
uj5u.com熱心網友回復:
找到問題了,是障礙物的設定有問題,下標應該不會越界,因為我只往右和往下搜索,而且超過這個范圍就會return轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/262639.html
標籤:C語言
下一篇:2021-02-23:給定一個正數n,求n的裂開方法數。規定:后面的數不能比前面的數小 。比如4的裂開方法有: 1+1+1+1、1+1+2、1+3、2+2、4,
