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

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

2016年藍橋杯C語言大學A組題目3--方格填數(shù)

2019-11-10 18:41:54
字體:
供稿:網(wǎng)友

題目3.方格填數(shù)

如下的10個格子

填入0~9的數(shù)字。要求:連續(xù)的兩個數(shù)字不能相鄰。

(左右、上下、對角都算相鄰)

一共有多少種可能的填數(shù)方案?

請?zhí)顚懕硎痉桨笖?shù)目的整數(shù)。

注意:你提交的應該是一個整數(shù),不要填寫任何多余的內(nèi)容或說明性文字。

數(shù)學好的可以直接用數(shù)學推算出來,用組合與計數(shù)的方法還是可以的。

既然藍橋杯考驗計算機編程能力,我這里還是采用算法來做。

這是一道考察dfs算法的題目,首先10個格子不夠規(guī)范,我們先補成12個格子(3*4)。

接下來要注意三個步驟:

①初始化:如何制作表格;如何給每個格子打上標記的問題;

②判斷:判斷點有哪些?

是否在矩陣內(nèi)?該格子是否可用?是左上還是右下的那個格子不能用?

③DFS搜索:三種情況的討論?

左上角?右下角?一般情況?

DFS算法的注意點:DFS對某個格子的數(shù)字搜索完后一定要還原,一定!!!

/*name:Rollchuchytype:dfs*/#include<iostream>#include<cstdio>#include<cmath>using namespace std;int row=3,col=4; int map[3][4];int flag[3][4];int vis[10];int dis[8][2]={0,1,//right0,-1,//left1,0,//up-1,0,//dowm1,1,-1,1,1,-1,-1,-1,}; //方向 int ans=0; void init(){	//init   	for(int i=0;i<10;i++){   		vis[i]=0;	   }	for(int i=0;i<row;i++){		for(int j=0;j<col;j++){			map[i][j]=0;			flag[i][j]=1;		}	}	//左上和右下兩個格子不能用 	flag[0][0]=0;	flag[2][3]=0;	}void check(){	int temp=1;//檢驗該填法是否合法	for(int i=0;i<3;i++){		for(int j=0;j<4;j++){			if(flag[i][j]==0) continue;			for(int k=0;k<8;k++){				int x=i+dis[k][0];				int y=j+dis[k][1];				//移動后是否還在矩形內(nèi)? 				if(x<0||x>=3||y<0||y>=4||flag[x][y]==0) continue;				if(abs(map[i][j]-map[x][y])==1) temp=0;			}		}	} 	if(temp){		ans++;	}}void dfs(int n){	int x=n/4;//row	int y=n%4;//col	if(x==3){//針對右下最后一個格子 	//12個格子全部搜索完畢,dfs結(jié)束 		check();		return ;	}	if(flag[x][y]){		for(int i=0;i<=9;i++){			if(vis[i]==0){				map[x][y]=i;				vis[i]=1;				dfs(n+1); 				vis[i]=0; //注意!一定要還原 			}		}	}	else{//針對左上第一個格子 		dfs(n+1); 	} } int main(){	init();	dfs(0);	cout<<ans<<endl;   return 0; }


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 雷山县| 大新县| 商河县| 江山市| 巴青县| 金沙县| 江油市| 敖汉旗| 佛坪县| 赞皇县| 濮阳县| 福贡县| 翼城县| 松溪县| 铜鼓县| 阿鲁科尔沁旗| 博爱县| 偏关县| 扎赉特旗| 横峰县| 山阳县| 梨树县| 邵阳县| 固阳县| 仙桃市| 太仓市| 民勤县| 蒙城县| 荔浦县| 井研县| 清涧县| 麻江县| 永德县| 红河县| 连江县| 日土县| 洪江市| 曲水县| 乃东县| 剑阁县| 盐边县|