1005: 過河卒

1005: 過河卒

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 50  Solved: 11
[Submit][Status][Web Board]

Description

如圖,A 點有一個過河卒,需要走到目標 B 點。卒行走規則:可以向下、或者向右。同時在棋盤上的任一點有一個對方的馬(如上圖的C點),該馬所在的點和所有跳躍一步可達的點稱爲對方馬的控制點。例如上圖 C 點上的馬可以控制 9 個點(圖中的P1,P2 … P8 和 C)。卒不能通過對方馬的控制點。

棋盤用座標表示,A 點(0,0)、B 點(n,m)(n,m 爲不超過 20 的整數,並由鍵盤輸入),同樣馬的位置座標是需要給出的(約定: C<>A,同時C<>B)。現在要求你計算出卒從 A 點能夠到達 B 點的路徑的條數。

Input

鍵盤輸入
B點的座標(n,m)以及對方馬的座標(X,Y){不用盤錯}

Output

屏幕輸出
一個整數(路徑的條數)。

Sample Input

6 6 3 2

Sample Output

17





#include<iostream>
#include <cmath>
#include "cstdio"
#include <string.h>//string類



/*
 這一題的幾個要點:
 1、這一題必須將數組改爲long long,否則無法通過。因爲最後的路線可能爲很大,不考慮馬理論極大值爲20的20次方,非常大!!
 2、注意爲鍵盤輸入,必須用cin、cout來解答
 3、注意邊界
 4、game[i][j]=game[i-1][j]+game[i][j-1];
 
 
 */
using namespace std;

int main()
{
    int Bx,By,Cx,Cy;
    //int game[25][25];
    long long game[25][25];
    //這一題必須用long long
    //這一題必須將數組改爲long long,否則無法通過。因爲最後的路線可能爲很大,不考慮馬理論極大值爲20的20次方,非常大!!
    
    
    //freopen("/Users/qigelaodadehongxiaodi/Desktop/data1.txt", "r", stdin);
    //這個不理,是用來方便輸入輸出的東西,利用文本輸入流來讀取數據
    //提交代碼的時候記得註銷這條語句


  // scanf("%d%d%d%d",&Bx,&By,&Cx,&Cy);
    cin>>Bx>>By>>Cx>>Cy;//注意爲鍵盤輸入
    for(int i=0;i<=Bx;i++)
        for(int j=0;j<=By;j++)
            game[i][j]=1;
    
    
    //將馬佔據的位置設置爲0,注意邊界
    //好好檢查,注意不要出錯
    game[Cx][Cy]=0;
    game[Cx+2][Cy+1]=0;
    game[Cx+1][Cy+2]=0;
    //只要考慮減的情況不要越界,加的情況不用考慮
    if(Cx-2>=0&&Cy-1>=0)game[Cx-2][Cy-1]=0;
    if(Cx-2>=0)game[Cx-2][Cy+1]=0;
    if(Cy-1>=0)game[Cx+2][Cy-1]=0;
    if(Cx-1>=0&&Cy-2>=0)game[Cx-1][Cy-2]=0;
    if(Cx-1>=0)game[Cx-1][Cy+2]=0;
    if(Cy-2>=0)game[Cx+1][Cy-2]=0;

    
    
    for(int i=0;i<=Bx;i++){
        for(int j=0;j<=By;j++){
            if(game[i][j]){//有可能一開始馬就把過河卒吃了
              if(i==0&&j==0)continue;
              else if(i==0)game[i][j]=game[i][j-1];
              else if(j==0)game[i][j]=game[i-1][j];
              else game[i][j]=game[i-1][j]+game[i][j-1];
            }
        }
    }
   
    //printf("%d",game[Bx][By]);
    cout<<game[Bx][By];
    return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章