weixin_43113933
2020-05-30 18:34
采纳率: 92.1%
浏览 140

马拦过河卒代码比较疑惑

方法1

#include <iostream>
#include <string.h>
using namespace std;
typedef  long long ll ;
ll f[16][16]={0};
bool dp[16][16];
ll F(ll i,ll j)
{
    if(dp[i][j]==0)
        return 0;
    if((i==0&&j==1)||(i==1&&j==0)||(i==0&&j==0))
        return 1;
    if(f[i][j])
        return f[i][j];
    else{
        if(i>=1&&j>=1)
            return  f[i][j]=F(i-1,j)+F(i,j-1);
        else if(i==0&&j>1)
            return f[i][j]=F(i,j-1);
        else
            return f[i][j]=F(i-1,j);
    }
}
int main() {
    memset(dp,1,sizeof(dp));
    int m,n,x,y;
    cin>>m>>n>>x>>y;
    dp[x][y]=0;
    dp[x - 1][y - 2] = 0; dp[x - 1][y + 2] = 0;
    dp[x + 1][y + 2] = 0; dp[x + 1][y - 2] = 0;
    dp[x - 2][y - 1] = 0; dp[x - 2][y + 1] = 0;
    dp[x + 2][y - 1] = 0; dp[x + 2][y + 1] = 0;
    cout<<F(m,n)<<endl;
    return 0;
}

/*运行结果
6 6 0 1
56

--------------------------------*/

方法2

#include<bits/stdc++.h>
using namespace std;
long long a[25][25],b[25][25];
void horse(int x,int y)
{
    a[x][y]=1;
    a[x-2][y-1]=1;
    a[x-2][y+1]=1;
    a[x-1][y-2]=1;
    a[x-1][y+2]=1;
    a[x+1][y-2]=1;
    a[x+1][y+2]=1;
    a[x+2][y-1]=1;
    a[x+2][y+1]=1;
}

int main()
{
   int bx,by,mx,my;
   cin>>bx>>by>>mx>>my;
    horse(mx+1,my+1);//马走日,防止数组越界,下标为负数

    b[1][1]=1;
    for(int i=1;i<=bx+1;i++)
        for(int j=1;j<=by+1;j++)
        {
           if((a[i][j]!=1)&&(b[i][j]==0))
            {
                b[i][j]=b[i-1][j]+b[i][j-1];//卒的两种走法
            }
        }

    cout<<b[bx+1][by+1];
    return 0;
}

/*运行结果
6 6 0 1
56

--------------------------------*/
此时却宕机了,我的疑惑是这两种方法不都越界了吗,第一种为什么没有宕机

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题