如圖,A 點(diǎn)有一個(gè)過河卒,需要走到目標(biāo) B 點(diǎn)。卒行走規(guī)則:可以向下、或者向右。同時(shí)在棋盤上的任一點(diǎn)有一個(gè)對(duì)方的馬(如上圖的C點(diǎn)),該馬所在的點(diǎn)和所有跳躍一步可達(dá)的點(diǎn)稱為對(duì)方馬的控制點(diǎn)。例如上圖 C 點(diǎn)上的馬可以控制 9 個(gè)點(diǎn)(圖中的P1,P2 … P8 和 C)。卒不能通過對(duì)方馬的控制點(diǎn)。
【輸入】 鍵盤輸入B點(diǎn)的坐標(biāo)(n,m)以及對(duì)方馬的坐標(biāo)(X,Y){不用判錯(cuò)}【輸出】 屏幕輸出 一個(gè)整數(shù)(路徑的條數(shù))。【樣例輸入】6 6 3 2【樣例輸出】17【AC代碼】
#include<iostream>#include<cstdio> //用scanf(),PRintf()輸入輸出加快速度#include<cstring> //cstring內(nèi)有memset()函數(shù)using namespace std;int a[9]={0,-1,-1,-2,-2,1,1,2,2}; //數(shù)組a[]存儲(chǔ)馬控制的橫坐標(biāo)范圍int b[9]={0,2,-2,1,-1,2,-2,1,-1}; //數(shù)組b[]存儲(chǔ)馬控制的縱坐標(biāo)范圍,注意相同下標(biāo)的a,b之間有一定的對(duì)應(yīng)關(guān)系,即除了(0,0)外|a|與|b|一個(gè)為1,另一個(gè)為2int n,m,x,y,i,j;int map[21][21]; //map[i][j]表示地圖上(i,j)這個(gè)點(diǎn)是否是馬的控制點(diǎn)long long tripnum[21][21]; //tripnum[i][j]表示從(0,0)到(i,j)卒合法的行走路線總數(shù)int main(){ memset(tripnum,0,sizeof(tripnum)); scanf("%d%d%d%d",&n,&m,&x,&y); for(i=0;i<=20;i++) for(j=0;j<=20;j++) map[i][j]=1; //map[i][j]為1時(shí)表示(i,j)非控制點(diǎn) for(i=0;i<=8;i++) if(x+a[i]<=20 && x+a[i]>=0 && y+b[i]<=20 && y+b[i]>=0) //如果控制點(diǎn)在地圖范圍內(nèi),即這個(gè)點(diǎn)存在 map[x+a[i]][y+b[i]]=0; //將其設(shè)為0,表示這里被馬控制 for(j=0;j<=20;j++) //從左到右遍歷最上面一行的所有點(diǎn) if(map[0][j]==1) //如果這個(gè)點(diǎn)不是控制點(diǎn) tripnum[0][j]=1; //那么從(0,0)到達(dá)這個(gè)點(diǎn)的路線自然只有一條 else //否則這點(diǎn)不可到達(dá),路線數(shù)為初值0條 break; //并且其右的點(diǎn)也不可達(dá),不必繼續(xù)遍歷 for(i=0;i<=20;i++) //從上到下遍歷最左邊一列的所有點(diǎn) if(map[i][0]==1) //如果這個(gè)點(diǎn)不是控制點(diǎn) tripnum[i][0]=1; //那么從(0,0)到達(dá)這個(gè)點(diǎn)的路線自然只有一條 else //否則這點(diǎn)不可到達(dá),路線數(shù)為初值0條 break; //并且其下的點(diǎn)也不可達(dá),不必繼續(xù)遍歷 for(i=1;i<=n;i++) //從(1,1)這個(gè)點(diǎn)開始,逐行的去看(也可以逐列) for(j=1;j<=m;j++) if(map[i][j]==1) //如果這個(gè)點(diǎn)不是控制點(diǎn) tripnum[i][j]=tripnum[i-1][j]*map[i-1][j]+tripnum[i][j-1]*map[i][j-1]; //那么到達(dá)它的路線數(shù)等于其左的點(diǎn)路線與其上的點(diǎn)之和,由于其左與其上的點(diǎn)有可能是控制點(diǎn),所以要乘以控制系數(shù)map[i][j](這也是為什么用0代表控制,而用1代表非控制,而不是調(diào)換過來的原因) printf("%lld",tripnum[n][m]);return 0;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注