




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
中北大學程序設計課程設計說明書學生姓名:學號:10051041學院:信息與通信工程學院專業(yè):光電信息工程題目:五子棋指導教師:職稱:2012年01月06日(紀念我已經(jīng)逝去的大學生活)院:信息與通信工程學院專業(yè):光電信息工程學生姓名:學號:10051041課程設計題目:五子棋起迄日期:2011年12月24日~2012年1月6日課程設計地點:111420指導教師:系主任:下達任務書日期:2011年12月25日課程設計任務書1.設計目的:1熟悉C語言程序設計的原理與方法;2掌握C語言開發(fā)環(huán)境下程序的具體設計;3掌握利用C語言分析解決具體問題。2.設計內容和要求:設計內容:用C語言設計一個五子棋游戲程序,允許游戲者自由選擇棋子顏色,實現(xiàn)人人對戰(zhàn)和人機對戰(zhàn),利用時間函數(shù)設置實現(xiàn)落子倒計時功能程序應該具有以下基本功能:1.顯示歡迎界面。2.玩家棋子可選,棋盤范圍足夠。3.落子時間倒計時。設計要求:1.不同的功能使用不同的函數(shù)實現(xiàn)(模塊化),對每個函數(shù)的功能和調用接口要注釋清楚。對程序其它部分也進行必要的注釋。3.對系統(tǒng)進行功能模塊分析、畫出總流程圖和各模塊流程圖。4.用戶界面要求使用方便、簡潔明了、美觀大方、格式統(tǒng)一。5.所有程序需在Win-Tc或MicrosoftVisualC++6.0環(huán)境調試通過。3.設計工作任務及工作量的要求〔包括課程設計計算說明書(論文)、圖紙、實物樣品等〕:課程設計說明書一份;電子文檔(說明書、設計程序)一份課程設計任務書4.主要參考文獻:譚浩強《c程序設計》北京大學出版社5.設計成果形式及要求:課程說明書打印,并裝訂;必要的程序流程圖和程序附錄。6.工作計劃及進度:2011年12月24日~2011年12月26日下達設計任務書,學生熟悉設計內容;2011年12月27日~2011年12月29日查閱參考資料,確定基本設計方案;2011年12月29日~2012年01月04日C語言進行程序設計;2012年01月05日~2012年01月06日完成設計報告;2012年01月06日答辯;系主任審查意見:簽字:年月日目錄1、課程設計的背景及意義……………062、設計的基本原理………063、設計的基本過程………084、設計的結果……………105、總結和結論…………….11設計背景及意義我們的五子棋程序是在VisualC++6.0環(huán)境下運行的。\o"查看圖片"VisualC++6.0MicrosoftVisualC++(簡稱VisualC++、MSVC、VC++或VC)微軟公司的C++開發(fā)工具,具有集成開發(fā)環(huán)境,可提供編輯C語言,C++以及C++/CLI等編程語言。VC++整合了便利的除錯工具,特別是整合了微軟視窗程式設計(WindowsAPI)、三維動畫DirectXAPI,Microsoft.NET框架。目前最新的版本是MicrosoftVisualC++2010。VisualC++6.0集成了MFC6.0,于1998發(fā)行。發(fā)行至今一直被廣泛地用于大大小小的項目開發(fā)。五子棋是一種兩人對弈的純策略型棋類游戲,是起源于中國古代的傳統(tǒng)黑白棋種之一。我們通過對《C語言》以及對《大學計算機基礎》的初步學習后,本學期末進行了課程程序設計,設計課題為“五子棋”。我們小組由6人組成,通過分工與合作并在趙老師的耐心指導下共同完成了此程序設計。2.設計的基本原理2.1問題描述連珠(五子棋)是有兩個人在一盤棋上進行對抗的競技運動。在對局開始時,先由用戶選擇哪方先開局,先開局一方將一枚棋子落在一點上,然后由另一方在對方棋周圍的交叉點上落子,如此輪流落子,直到某一方首先在棋盤的直線、橫線或斜線上形成連續(xù)的五子則該方就算獲勝。此時,算法結束。
2.2需求分析(1)輸出棋盤界面(2)要求玩家選擇棋子(3)玩家輪流下棋(4)判斷鍵盤輸入哪個鍵按規(guī)則執(zhí)行操作(5)判斷誰先落棋(6)判斷贏家(7)輸出結果界面2.3流程圖開始玩家選擇棋子玩家移動棋子輸出棋盤界面O方先輸入棋子坐標刷新棋盤界面轉換玩家判斷棋子是否出界判斷是否重子輸出勝利界面刷新棋盤界面結束判斷是否贏棋NNNYYY開始玩家選擇棋子玩家移動棋子輸出棋盤界面O方先輸入棋子坐標刷新棋盤界面轉換玩家判斷棋子是否出界判斷是否重子輸出勝利界面刷新棋盤界面結束判斷是否贏棋NNNYYY3設計的基本過程charb[40][40];voidshow()//輸出獲勝圖像//{inti=0,j=0;//i為橫坐標變量,j為縱坐標變量// for(i=0;i<40;i++)//對圖像數(shù)組賦初值// for(j=0;j<40;j++) {b[i][j]=46;} for(i=0;i<40;i++)//對圖像數(shù)組特定點賦值// for(j=0;j<40;j++) { if(i>10&&i<16) {if(j>10&&j<16||j>25&&j<31) b[i][j]='O';} else { if(i==21) {if(j>=6&&j<=35) b[i][j]='O';} else { if(i==22) {if(j>=7&&j<=34) b[i][j]='O';} else { if(i==23) {if(j>=8&&j<=33) b[i][j]='O';} else { if(i==24) {if(j>=9&&j<=31) b[i][j]='O';} else { if(i==25) {if(j>=10&&j<=30) b[i][j]='O';} else { if(i==26) {if(j>=12&&j<=28) b[i][j]='O';} else { if(i==27) {if(j>=14&&j<=26) b[i][j]='O';} else { if(i==28) {if(j>=17&&j<=23) b[i][j]='O';} } } } } } } } } } for(i=0;i<40;i++)//輸出圖像數(shù)組// { for(j=0;j<40;j++) printf("%c",b[i][j]); printf("\n"); } }詳細說明:Show函數(shù)的目的是輸出獲勝界面,調用全局變量b[][](目的是為圖像分配存儲空間),i為橫坐標變量,j為縱坐標變量,接下來的兩個for是把b[][]初始化為“.”,再接下來的雙for是為塑形:限定行間距為10<i<16,再限定列間距為10<j<16或25<j<31,用判斷語句來塑造圖形“雙眼”;當i=21時,限定6<=j<=25,當i=22,23,24,25,26,27時同理,用判斷語句來塑造“嘴”,最后用雙for語句來輸出圖形。4設計結果玩家獲勝顯示界面截圖5總結與結論課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程.回顧起此次課程程序設計,至今我仍感慨頗多,從選題到定稿,從理論到實踐,在整整兩星期的日子里,學到很多很多的的東西,不僅鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,才能真正提高自己的實際動手能力和獨立思考的能力。在設計的過程中難免會遇到過各種各樣的問題,同時在設計的過程中也發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,通過這次課程設計之后,把以前所學過的知識重新溫故。
這次課程設計順利完成了,在設計中遇到了很多編程問題,最后在趙宇老師的辛勤指導下,終于游逆而解。同時,在趙宇老師的身上我學得到很多實用的知識,我表示感謝!同時,對給過我?guī)椭乃型瑢W和各位指導老師再次表示忠心的感謝!附錄負責人設計內容Viodjudge()函數(shù)的設計及程序的調試Viodjudge()函數(shù)的設計及程序的調試Voidmove()函數(shù)的設計及課程設計說明書的排版制作Intplaying()函數(shù)的設計及程序的調試Voidshowcheckerboard()函數(shù)設計及相關操作Voidshow()函數(shù)的設計及程序的調試程序源代碼:#include<stdio.h>#include<string.h>chara[65][65];charb[40][40];voidshow()//輸出獲勝圖像//{inti=0,j=0;//i為橫坐標變量,j為縱坐標變量// for(i=0;i<40;i++)//對圖像數(shù)組賦初值// for(j=0;j<40;j++) {b[i][j]=46;} for(i=0;i<40;i++)//對圖像數(shù)組特定點賦值// for(j=0;j<40;j++) { if(i>10&&i<16) {if(j>10&&j<16||j>25&&j<31) b[i][j]='O';} else { if(i==21) {if(j>=6&&j<=35) b[i][j]='O';} else { if(i==22) {if(j>=7&&j<=34) b[i][j]='O';} else { if(i==23) {if(j>=8&&j<=33) b[i][j]='O';} else { if(i==24) {if(j>=9&&j<=31) b[i][j]='O';} else { if(i==25) {if(j>=10&&j<=30) b[i][j]='O';} else { if(i==26) {if(j>=12&&j<=28) b[i][j]='O';} else { if(i==27) {if(j>=14&&j<=26) b[i][j]='O';} else { if(i==28) {if(j>=17&&j<=23) b[i][j]='O';} } } } } } } } } } for(i=0;i<40;i++)//輸出圖像數(shù)組// { for(j=0;j<40;j++) printf("%c",b[i][j]); printf("\n"); } }voidmove(int*x,int*y)/*移動棋子的方向*///x為上一步棋子橫坐標,y為上一步棋子縱坐標//{ charb[40];//為記錄棋子將要移動的步伐// inti,z,flag=1;//z為某一步的中間變量,flag為標志變量// gets(b);//輸入要移動的步伐// for(i=0;i<40;i++) { z=b[i];//把b【】的某一步傳遞給z// switch(z)//判斷移動棋子方向// { case119:*x=*x-1;break;//w鍵控制棋子上移// case97:*y=*y-1;break;//a鍵控制棋子左移// case115:*x=*x+1;break;//s鍵控制棋子下移// case100:*y=*y+1;break;//d鍵控制棋子右移// case111:flag=0;break;//o鍵確定落子// } if(flag==0)break;//判斷某步是否移動完成// }}intplaying()/*開始下棋*/{intflag=1,i=0,x=0,y=0,k,l,n=0,m=1;//flag為記錄哪方下棋的標志變量,x,y為a[][]的橫縱坐標,m,n分別記錄o方,@方的積累步數(shù)// int*p1=&x,*p2=&y; intjudge(intx,inty);//本函數(shù)所用子函數(shù)的聲明// voidmove(int*p1,int*p2); voidshowcheckerboard(intx,inty); printf("O方先輸入首子坐標:"); scanf("%d%d",&x,&y);//輸入首坐標// a[x][y]='O';//首坐標的棋盤位置畫棋子// showcheckerboard(m,n);//輸出更新后的棋盤// for(i=0;i<2000;i++)//改變玩家// { if(flag==1) flag=0; else flag=1; for(k=0;k<2000;k++)//玩家落子并判斷下的棋子是否過界或此處是否有子// { if(flag==1) { printf("O方下棋\n");m++;} else { printf("@方下棋\n");n++;}move(p1,p2); if(x>=1&&x<=64&&y>=1&&y<=64) { if(a[x][y]==46)break; else {if(flag==1)m--;elsen--; printf("此處有子,請繼續(xù)移子"); continue; } } else{if(flag==1)m--;elsen--;printf("此處過界,請繼續(xù)移子");} } if(flag==1)//在a[][]的特定位置更新字符// a[x][y]='O'; else a[x][y]='@'; showcheckerboard(m,n);//更新棋盤// l=judge(x,y);//記錄誰贏變量// if(l==1)returnflag; }}voidshowcheckerboard(intx,inty)/*畫出棋盤*///x,y分別為o方下棋步數(shù),@方下棋步數(shù)//{ inti,j,w=0;//i,j為橫縱坐標變量//printf("================================================================================================================\n");printf("0方累計下棋步數(shù):%d@方累計下棋步數(shù):%d\n",x,y);printf("================================================================================================================\n"); for(i=0;i<65;i++)//輸出橫縱坐標// printf("%2d",i); printf("\n"); for(i=1;i<65;i++) { for(j=0;j<65;j++) { if(j==0) { w+=1; printf("%2d",w); } else { printf("%2c",a[i][j]); } } printf("\n"); } }intjudge(intx,inty)/*判斷各方向五子是否連成一線*///x,y分別為橫縱坐標//{ inti,b,c,d,e,z=1;//z為標志變量,記錄每個方向連棋個數(shù)// for(i=1;i<5;i++)//垂直向下數(shù)// { if(a[x][y+i]==a[x][y]) { z+=1; if(z==5) {return(1);break;} } elsebreak; } for(i=1;i<5;i++)//垂直向上數(shù)// { if(a[x][y-i]==a[x][y]) { z+=1; if(z==5) {return(1);break;} } elsebreak; } e=z;z=1;for(i=1;i<5;i++)//水平向右數(shù)// { if(a[x+i][y]==a[x][y]) { z+=1; if(z==5) {return(1);break;} } elsebreak; }for(i=1;i<5;i++)//水平向左數(shù)// { if(a[x-i][y]==a[x][y]) { z+=1; if(z==5) {return(1);break;} } elsebreak;}b=z;z=1;for(i=1;i<5;i++)//向左下方數(shù)// { if(a[x-i][y+i]==a[x][y]) { z+=1; if(z==5) {return(1);break;} } elsebreak;}for(i=1;i<5;i++)//向右上方數(shù)// { if(a[x+i][y-i]==a[x][y]) { z+=1; if(z==5) {return(1);break;} } elsebreak;}c=z;z=1;for(i=1;i<5;i++)//向左上方數(shù)// { if(a[x-i][y-i]==a[x][y]) { z+=1; if(z==5) {return(1);break;} } elsebreak;}for(i=1;i<5;i++)//向右下方數(shù)// { if(a[x+i][y+i]==a[x][y]) { z+=1; if(z==5) {return(1);break;} } elsebreak;}d=z;if(e!=5&&b!=5&&c!=5&&d!=5)//判斷某個方向五子連棋//{ return(0);}}voidmain(){intx,y,flag,m=0,n=0,p=0;//flag為哪方下棋的判斷變量,m,n為分別記錄雙方的步數(shù)//printf("================================================================================================================\n");printf("w為上移動,a為左移動,s為下移動,d為右移動,o確定落棋子\n");printf("=================================================================================================================\n");printf("玩家1選擇棋子:選0方輸入1,選@方輸入2\n");scanf("%d",&p);for(x=1;x<65;x++)//棋盤數(shù)組初始化//for(y=1;y<65;y++)a[x][y]=46;showcheckerboard(m,n);//輸出棋盤//flag=playing();//下棋//show();//輸出獲勝圖形//if(flag==1)//判斷哪方獲勝//printf("O方獲勝");elseprintf("@方獲勝");}參賽隊號:16018選題題號:A五子連珠問題模型研究摘要本文針對“五子連珠”問題在二維網(wǎng)格和三維網(wǎng)格的最優(yōu)方案進行建模與求解。對于六行七列網(wǎng)格的情況進行分析,先考慮一維情況下的模型,并將一維情況下模型的周期性性質推廣至二維,據(jù)此建立0-1規(guī)劃模型,進行求解得最優(yōu)方案為最少取出8個棋子。并對結果的準確性進行理論證明,對此給出兩種證明方法。第一中可以通過軟件求解過程中的輸出信息來給與證明,第二種通過反證法進行理論證明。對上述結果對應的方案進行研究,得到二維網(wǎng)格中最優(yōu)方案的變化存在一定的周期性,據(jù)此周期性建立遞推模型,并得到實用于一般二維網(wǎng)格中最優(yōu)方案的數(shù)學模型,對13行17列的網(wǎng)格進行求解,的到最少取出44個棋子。對此二維網(wǎng)格最優(yōu)方案的周期性進一步研究并推廣到三維網(wǎng)格中,通過二維網(wǎng)格疊加形成三維網(wǎng)格的方式,從而建立了三維網(wǎng)格中的最優(yōu)方案的數(shù)學模型,并對6*7*6的網(wǎng)格進行求解的到少取出50個棋子。關鍵字:0-1規(guī)劃,遞推模型,網(wǎng)格疊加
1問題重述問題1:在6×7的長方形棋盤放滿棋子。從這42個棋子中取出一些棋子,使得棋盤上剩下的棋子,沒有五個在一條直線(橫、豎、斜方向)上依次相連,最少取出多少個棋子才能滿足要求?同時給出一種去掉棋子的方式。問題2:問題1中使用數(shù)學證明的方法,只能解決規(guī)模很小的問題。現(xiàn)在從一般性的問題考慮,一利用數(shù)學建模的方法建立一般模型,然后設計算或利用軟件求解。基于此,請針對任意規(guī)模的棋盤,滿足的條件與問題1相同。問至少去掉多少個棋子。問題3:三維問題將該二維平面網(wǎng)格擴展到三維空間,得到一個的空間長方體網(wǎng)格。在這些格子中同樣都填滿了棋子,現(xiàn)要從中抽取一部分,使得每種平面,包括橫向所截的m個平面,縱向所截的n個平面,豎直方向所截的p個平面,在每個平面上在橫向、縱向、斜方向上都不出現(xiàn)5子連珠。并且要求在空間斜線上也不出現(xiàn)5子連珠。問最少去掉多少個棋子可以滿足要求。請建立一般問題的數(shù)學模型。并給出具體的解結果。
2問題分析2.1問題(1)分析由題意可知,要求解一個取出的數(shù)量最少的取棋子方案。此問題中可以通過0-1變量來表示每個位置上的棋子是否被取出,若取出,則用1表示,否則用0表示。那么就可以用一個0-1矩陣來表示方案,則含有1的個數(shù)最少,且滿足題目中三個條件的矩陣就表示的是最優(yōu)方案。因此可以建立0-1規(guī)劃模型,對問題進行求解。模型的目標函數(shù)即為矩陣的行列變量總和。模型的約束條件可以通過題目中的三個條件來給定。而對于這三個條件,先考慮一維情況下的模型,并將一維情況下的模型的性質推廣至二維,并由此性質來建立對應的約束條件。對于結果準確性,可以通過軟件求解過程中的輸出信息來給與證明,也可以通過反證法來進行理論證明。2.2問題(2)分析本題目要求將問題一的模型推廣至一般情況。先對問題(1)的結論進行分析,得出結論所具有的性質,并加以理論證明,然后將其性質推廣至一般情況。先將問題一中的模型的行數(shù)推廣至一般情況,并在此基礎上,將列數(shù)也推廣至一般情況,從而建立一般情況下的模型。的模型還需要考慮特殊情況:行數(shù)小于5或者列數(shù)小于5。對此,很容易能得到在行數(shù)和列數(shù)都小于5的情況下,不需要取出任何點,即結果為零;對于只有列數(shù)小于5或者行數(shù)小于5的情況,規(guī)定每行或者每列的最優(yōu)結果的累加,即是最終結果。而對于每行或者每列的最優(yōu)結果,可以通過一般一維模型下的最優(yōu)結果的算法給出。2.3問題(3)分析本題目要求將平面網(wǎng)格推廣至三維空間,建立一般模型,并計算6x6x7情況下的最優(yōu)結果。在問題二模型的基礎上將結果的性質經(jīng)一部推廣至三維網(wǎng)格,這樣,就可以直接應用結果的性質,通過二維到三維網(wǎng)格的二維網(wǎng)格擴充的方式對三維模型進行建立。3模型假設假設二維網(wǎng)格中的每個格子都是1x1的小正方形,在三維網(wǎng)格中,每個格子是1x1x1的小正方體。假設格子之間共頂點或者共邊時,兩個字相連。假設在相連的格子中的棋子的距離是1。假設每個小方格或者小正方體中只能放一個棋子。4符號說明 表示0-1變量 表示方案矩陣的列向量 表示方案矩陣的行向量 表示n對m向上取整 表示n對m向下取整 表示二維網(wǎng)格最少可取棋子的數(shù)量 表示三維網(wǎng)格最少可取棋子的數(shù)量 表示n對m取余數(shù)5模型建立和求解5.1問題1的模型建立與求解5.1.1模型建立前提理論為了在二維片面上建立模型,先來研究模型在一維情況下的性質,要在n個方格中取棋子,則可以用一個n元素只有0和1的n維向量a來表示最取棋子方案。則為了使得取棋子總數(shù)最少,及方案最優(yōu),就有結論:表示a向量的第i個分量) (1)其中,表示向下取整,表示向上取整。將此性質推廣至二維網(wǎng)格,則對于二維網(wǎng)格的取棋子方案矩陣 (2)其中為矩陣W的列向量,為W的行向量則有如下結論: (3) (4)且在各行各列性質在W各行,各列以及各對角線上仍然成立。這個結論很容易便可從一維的情況得到,只要證明ri和ci中的每個分量都和及的對應分量相等即可,這從一維的情況中很容易就能得到。5.1.2模型建立對于6×7網(wǎng)格的問題,先設取棋子方案矩陣位: (5)根據(jù)上述性質式(3)、(4)可得: 將其帶入取棋子方案矩陣,并對位置變量進行重新編號,則可對取棋子方案矩陣進行簡化,且簡化后取棋子方案矩陣為: (6)為使方案各行滿足條件,可對此矩陣各行使用性質式(2),則可得式(7)所示約束條件;為使方案各列滿足條件,可對此矩陣各列使用性質式(2),可得式(8)所示約束條件;為使方案的各條對角線滿足條件,我們僅對長度大于4的對角線使用式(2),可得式(9)、(10)所示8條約束條件。 (7) (8) (9) (10)聯(lián)立以上各約束條件,并通過W矩陣建立模型如下: (11)求解模型,則可得最少的取棋子個數(shù)及最優(yōu)方案矩陣,其中Z的值就是最少可取走的棋子的數(shù)量。將,,帶入W則可得到最優(yōu)方案矩陣。5.1.3模型求解對于上述0-1規(guī)劃模型,我們可直接通過MATLAB軟件求解。我們得到的所有解如下:圖SEQ圖\*ARABIC1最優(yōu)方案示意圖通過求解模型得到最少取棋子數(shù)量為8個,一方面,通過軟件求解過程當中的輸出的最優(yōu)解得類型來判定此結果就是最少的取棋子個數(shù);另一方面,可通過反證法來證明8就是最少取棋子個數(shù)。反證法證明:假設七個棋子可以滿足條件,則有W矩陣的7個列向量中都只能有一個非零的分量,且有,不妨設,,,,則此時,W矩陣的最后一行全為零,此取棋子方案表示在6x7網(wǎng)格的第6行中不取走任何棋子,顯然,在第6行中出現(xiàn)7個棋子連續(xù)的情況。由此我們可以知道取走7個棋子是無法。即8個棋子為最少的取棋子數(shù)量。5.2問題(2)的模型建立和求解5.2.1模型建立理論準備根據(jù)問題一中一維模型最優(yōu)方案的性質到二維網(wǎng)格中最優(yōu)性質的推廣結論式(3)、(4),將其作適當推廣可得如下(12)、(13)兩條性質:對于m行n列的網(wǎng)格,其最優(yōu)方案矩陣W的行向量ri=和列向量cj (12)其中,; (13)其中,。此性質說明的是:在二維網(wǎng)格中,隨著行和列的擴充,最優(yōu)方案和最優(yōu)取棋子矩陣的變化具有一定的周期性,且周期為5,即行數(shù)每增加5,或者列數(shù)每增加5,最優(yōu)方案矩陣將在矩陣的后邊拼接一個特定的矩陣。最優(yōu)方案對應的取棋子個數(shù)也將以特定的值增加。據(jù)此,便可將二維網(wǎng)格中最優(yōu)方案的模型推廣至一般情況。5.2.2模型建立在以上理論基礎上,通過最優(yōu)方案的行周期性,可將二維網(wǎng)格的行數(shù)推廣到一般情況。以5×5網(wǎng)格為初始的網(wǎng)格狀態(tài),可建立網(wǎng)格擴充5×n時的最少取棋子個數(shù)模型如下:其中,表示在網(wǎng)格中最優(yōu)方案所對應的取棋子個數(shù),n%5表示n和5的求余數(shù)運算。在此基礎上,建立將網(wǎng)格擴充成為時,最優(yōu)取棋子個數(shù)的模型: 以上模型都是建立在m,n大于5的情況下,為保證模型的一般性,還需考慮m,n小于5的情況,當m,n都小于5時,顯然有最優(yōu)方案為不去出任何棋子,即最優(yōu)取棋個數(shù)為0,最優(yōu)取棋矩陣為全零矩陣。而對于m,n中僅有一個小于5的情況,由式(2)可知為使達到最優(yōu),故規(guī)定: 帶入上述,模型,則可得到完整的一般情況下的模型為:5.2.3模型求解對上述模型的求解,通過MATLAB軟件編寫函數(shù)fhanshu(m,n)來實現(xiàn)(函數(shù)具體代碼在附件二中),其返回值為最少的可取出的棋子數(shù)量,并且會根據(jù)結果的數(shù)量進行二維示意圖繪制,如果返回值為零則不進行繪圖且輸出不用取出任何棋子的說明,否則,則繪制相應的最優(yōu)取棋子方案示意圖。將m=13,n=17,帶入函數(shù)可得最少可取棋子數(shù)量為:44,其繪制出的最優(yōu)方案示意圖有多個,其中一個示意圖如圖所示,圖SEQ圖\*ARABIC213x17最優(yōu)方案示意圖5.3問題(3)模型建立和求解5.3.1模型建立前的理論準備1)對問題二中,二維網(wǎng)格最優(yōu)解的周期性性質可推廣至三維情況,即在三維網(wǎng)格中,隨著層數(shù)的擴充,最優(yōu)方案和最優(yōu)取棋子矩陣的變化具有一定的周期性,且周期為5。此性質在三維情況下可以通過面周期性加以證明。2)分析問題二的結果,可得到如下結論,其中,‘+’為0-1向量的加法運算,可參看符號說明。將此性質推廣至三維,即其中某一三維網(wǎng)格最優(yōu)方案的連續(xù)疊加在一起的五個二維網(wǎng)格的取棋子方案,則可保證空間斜線上不出現(xiàn)五顆棋子連續(xù)的情況。對此性質,可考慮可通過反證法進行證明。假設對于某三維網(wǎng)格最優(yōu)方案上述性質不滿足,即在此最優(yōu)方案中有則不妨設則可由0-1變量‘+’運算方法知:;由此可知此方案中有五個連續(xù)的棋子,那么這種方案就不是最優(yōu)解。由此,也就的到上述性質在三維網(wǎng)格中成立。5.3.2模型建立對三維情況下模型的建立,只需要將問題二中的模型在層數(shù)上進行擴充。以維初始網(wǎng)格狀態(tài)對網(wǎng)格進行擴充,并記此5x5x5網(wǎng)格的最少可取t個棋子,則可建立網(wǎng)格擴充為時最少取棋子個數(shù)的模型:其中表示在空間網(wǎng)格中最少可取的棋子數(shù)量。同樣的我們規(guī)定:則可得到在三維空間網(wǎng)格中最少可取棋子個數(shù)的模型為:5.3.3模型求解對上述模型的求解,通過MATLAB軟件編寫函數(shù)3dimension(m,n,p)來實現(xiàn)(函數(shù)具體代碼在附件三中),其返回值為最少的可取出的棋子數(shù)量,并且會根據(jù)結果的數(shù)量進行二維示意圖繪制,如果返回值為零則不進行繪圖且輸出不用取出任何棋子的說明,否則,則繪制相應的最優(yōu)取棋子方案示意圖。將m=6,n=7,p=6,帶入函數(shù)可得最少可取棋子數(shù)量為:50。得到最優(yōu)方案對應,x,y,z坐標在附加的程序3;6模型的評價及改進6.1問題一的模型評價及改進問題一建立的模型是0-1規(guī)劃模型,通過了簡單的方法去解決復雜的問題,簡單明了,容易理解。模型的建立在一維模型的基礎上,十分有利于模型向更高維數(shù)的推廣。解決了6x7二維網(wǎng)格的最少取旗子數(shù)量問題。但是由于只能解決具體的問題,模型不具有一般性,網(wǎng)格行列數(shù)不同的問題不能進行求解。問題二中針對這一缺點給出了解決一般問題的模型。6.2問題二的模型評價及改進問題二模型是基于問題一以及一維情況下的模型性質的,并由此得到了二維網(wǎng)格在擴充過程當中周期性規(guī)律,并由此建立了相應的最優(yōu)去棋子個數(shù)的模型。這樣就使得程序模型的求解在程序實現(xiàn)等過程就變得相當簡單。將復雜的問題,通過其規(guī)律性簡化。但模型的缺點就是通過結果的規(guī)律性直接對問題進行了建模求解,從模型當中看不出問題結果的實際推導過程,是一個相對比較高度集中的模型。6.3問題三的模型評價及改進問題三的模型是基于問題二的模型的。通過二維模型的周期性性質相三位情況的推廣,發(fā)現(xiàn)了三位情況下最優(yōu)方案仍然具有周期性,這對這一問題模型的建立起到了極其重要的作用。和問題二中的模型一樣,該模型通過的求解在程序實現(xiàn)時是相當簡單的。同樣,由于模型只給出了最終結果的計算方式,是一個相對比較集中的模型,在模型中看不出結果的實際轉換過程。
7參考文獻姜啟源,葉其孝,數(shù)學建模,北京:機械工業(yè)出版社,2009.8.馬莉,MATLAB語言實用教程,北京:清華大學出版社,2010.1.薛定宇,陳陽泉,高等數(shù)學問題的MATLAB求解,北京:清華大學出版社,2008.汪曉銀,周保平,數(shù)學建模與數(shù)學實驗(第二版),北京:科學出版式,2012.8.同濟大學數(shù)學系,高等數(shù)學(第二版)上冊,上海:同濟大學出版社,2009.10.占軍,張倩,MATLAB函數(shù)查詢手冊,北京:機械工業(yè)出版社,2011.1.
8附錄程序1a=zeros(4,25);a(1,3)=1;a(1,9)=1;a(1,15)=1;a(1,16)=1;a(1,22)=1;a(2,5)=1;a(2,6)=1;a(2,12)=1;a(2,18)=1;a(2,24)=1;a(3,3)=1;a(3,7)=1;a(3,11)=1;a(3,20)=1;a(3,24)=1;a(4,5)=1;a(4,9)=1;a(4,13)=1;a(4,17)=1;a(4,21)=1;c=[22111];b=zeros(14,25);b(1,1:5)=c;b(2,6:10)=c;b(3,11:15)=c;b(4,16:20)=c;b(5,21:25)=c;b(6,1)=2;b(6,7)=1;b(6,13)=1;b(6,19)=1;b(6,25)=1;b(7,2)=2;b(7,8)=1;b(7,14)=1;b(7,20)=1;b(7,21)=1;b(8,1)=2;b(8,10)=1;b(8,14)=1;b(8,18)=1;b(8,22)=1;b(9,2)=2;b(9,6)=1;b(9,15)=1;b(9,19)=1;b(9,23)=1;b(10,1)=2;b(10,6)=1;b(10,11)=1;b(10,16)=1;b(10,21)=1;b(11,:)=[0,b(10,1:24)];b(12,:)=[0,0,b(10,1:23)];b(13,:)=[0,0,0,b(10,1:22)];b(14,:)=[0,0,0,0,b(10,1:21)];f=ones(1,25);f(1:2)=[44];f(3:7)=[22222]f(11:12)=[22];f(16:17)=[22];f(21:22)=[22];A=[b;-b]d=[ones(14,1)*2;ones(14,1)*-1]aeq=a;beq=ones(4,1);[x,fv,exitflag,output]=bintprog(f,A,d,aeq,beq);程序2function[SA]=fhanshu(n,m)p=zeros(5,5);p(1,5)=1;p(2,3)=1;p(3,1)=1;p(4,4)=1;p(5,2)=1;B=[];C=[];D=[];%N<5,M>5;ifn<5||m==5ifm>5||m==5S=floor(m/5)*n;h=floor(m/5);k=mod(m,5);c=p(1:n,1:5);fori=1:hC=[C,c];endC=[C,c(1:n,1:k)]f=size(C,1);k=size(C,2);fori=1:fforj=1:kifabs(C(i,j)-1)<1e-5axis([1max(f,k)+11max(k,f)+1]);plot(j+0.5,i+0.5,'r*');title('五子連珠圖2')gridon;holdonelseaxis([1max(k,f)+11max(k,f)+1]);plot(j+0.5,i+0.5,'ko');gridon;holdonendendendendend%N<5,M<5時ifn<5ifm<5S=0;endend%N>=5,M>=5ifm>5ifn>5l=floor(m/5);k=mod(m,5);c=p(1:5,1:5);fori=1:lB=[B,c];endB=[B,p(1:5,1:k)];x=floor(n/5);y=mod(n,5);fori=1:xD=[D;B];endD=[D;B(1:y,1:length(B))];s=size(D,1)f=size(D,2)figure(1)fori=1:sforj=1:fifabs(D(i,j)-1)<1e-5axis([1max(s,f)+11max(s,f)+1]);%axis([1s+11f+1])plot(j+0.5,i+0.5,'r*');
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)品顧問協(xié)議合同范本
- 公司采購禮品合同范本
- 中介合同 網(wǎng)簽合同范例
- 公司門面房購買合同范例
- 做模具合同范例
- 中介幫過戶合同范本
- 嘉興施工方案匯報
- 企業(yè)記賬報稅合同范例
- 東北民歌演唱分析
- 光伏用地 招租合同范例
- 水利工程施工驗收規(guī)范對工程監(jiān)理單位的要求
- 生豬行業(yè)pest分析
- 2024內蒙古烏審旗圖克鎮(zhèn)圖克工業(yè)園區(qū)中天合創(chuàng)化工分公司招聘20人高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 五年級上冊小數(shù)乘除練習300道及答案
- 《新概念英語第二冊》電子書、單詞、筆記、練習冊(附答案)匯編
- 學校心理健康教育的目標體系課件
- 控制加班改善對策培訓課件
- 功能材料-智能材料
- 《信息科技》學科新課標《義務教育信息科技課程標準(2022年版)》
- 合同智能審核與風險預警
- 2024年中興通訊股份有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論