国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

【遞推】過河卒

2019-11-14 11:15:46
字體:
供稿:網(wǎng)友
【題目描述】

如圖,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;}


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴化市| 江永县| 平塘县| 伊宁市| 溆浦县| 盐城市| 昌江| 盐城市| 鄂温| 五大连池市| 内江市| 阿拉尔市| 应城市| 彝良县| 五莲县| 伊春市| 瑞安市| 大冶市| 大埔县| 桐庐县| 西乡县| 丰原市| 绥滨县| 嘉义市| 武义县| 贵阳市| 广水市| 抚松县| 乐业县| 沙田区| 慈溪市| 黑山县| 腾冲县| 武定县| 元朗区| 靖西县| 库尔勒市| 连城县| 镇安县| 嘉定区| 桂东县|