算法设计与分析——递归与分治策略——循环日程赛
生活随笔
收集整理的這篇文章主要介紹了
算法设计与分析——递归与分治策略——循环日程赛
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
問題描述:
非遞歸方案一:代碼
#include<bits/stdc++.h> using namespace std;void gameTable(vector<vector<int>> &vec,int k) {int i=0,j=0;//二維數(shù)組的下標(biāo),行,列 int temp;//需要新安排選手?jǐn)?shù)目 int n;//當(dāng)前的選手?jǐn)?shù)目 //先初始化一個(gè)兩人的比賽表n=2; //k=1兩個(gè)參賽選手日程可以直接求得vec[1][1]=1;vec[1][2]=2;vec[2][1]=2;vec[2][2]=1;//關(guān)鍵的大循環(huán) for(int x=1;x<k;x++)//安排2^x個(gè)選手的日程表 {temp=n;//多了temp個(gè)選手 已建立了temp個(gè)選手的表 n*=2;//目前選手的數(shù)量//安排左下角的比賽日程 for(i=temp+1;i<=n;i++)//左下角的行 {for(j=1;j<=temp;j++)//左下角的列 vec[i][j]=vec[i-temp][j]+temp;//同一列的第i-temp行(從上到下依次對應(yīng))的值加上新增數(shù)temp }//安排右上角的比賽日程 for(i=1;i<=temp;i++)//右上角的行 {for(j=temp+1;j<=n;j++)//右上角的列 vec[i][j]=vec[i+temp][j-temp];}//安排右下角的比賽日程 for(i=temp+1;i<=n;i++)//右下角的行 {for(j=temp+1;j<=n;j++)//右下角的列 vec[i][j]=vec[i-temp][j-temp];} } cout<<"(第i行第j列表示和第i個(gè)選手在第j天比賽的選手序號)"<<endl;for(i=1;i<=n;i++)//畫表 {for(j=1;j<=n;j++){cout<<setw(3)<<vec[i][j];}cout<<endl;}}int main() {cout<<"比賽選手個(gè)數(shù)為n(n=2^k),請輸入?yún)?shù)K(K>0):";int k;cin>>k;int num=1;for(int i=0;i<k;i++){num*=2;}//stl的二維的vector需要初始化后才可以使用 vector<vector<int>> vec(num+1, vector<int>(num+1));gameTable(vec,k);return 0; }for(int x=1;x<k;x++)//安排2^x個(gè)選手的日程表
//stl的二維的vector需要初始化后才可以使用
vector<vector> vec(num+1, vector(num+1));
方案二:使用遞歸來解決
動(dòng)態(tài)開辟空間
int *p = new int[m]; //開辟行
for(int i = 0; i < m; i++)
p[i] = new int[n]; //開辟列
總結(jié)
以上是生活随笔為你收集整理的算法设计与分析——递归与分治策略——循环日程赛的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 200斤胖子减肥的最好办法是什么
- 下一篇: Macbook电脑超快显示快捷键如何电脑