迴圈賽日程表,在這篇文章已經說的很詳細了
這裡多介紹乙個細節,並詳細解釋陣列指標
#include
#include
using
namespace
std;
void round_robin_calendar(int **a,int k,int n)
m*=2;
}}int main()
在這個程式裡,用到二級指標與陣列指標,之後二級指標又有二維陣列形式的應用,不容易理解。
1.先看這一句:
int **a=new
int *[n+1];
這個形式不常見,更簡單類似的例子有:
int *a=new
int[n+1];
這個大家都知道:
—–new int[n+1] 新申請一段可以儲存n+1個int型整數的記憶體空間
—–int* a 定義乙個int型指標
—–int *a=new int[n+1]就是讓int型指標指向申請的記憶體空間的首位址!
a是乙個陣列指標
(陣列指標:a pointer to an array,指向陣列的指標
區別於指標陣列:array of pointers,用於儲存指標的陣列,也就是陣列元素都是指標)
此時可以把a直接看作陣列
可以這樣用:a[5]=5;
(二級指標:任何值都有位址 ,一級指標的值雖然是位址,但這個位址做為乙個值亦需要空間來存放,是空間就具有位址 ,這就是存放位址這一值的空間所具有的位址,二級指標就是為了獲取這個位址)
2.而對於
int **a=new int *[n+1];
—–先定義二級指標 int **a;
—–然後分配n+1個int *型數的空間,
—–a指向這個空間的首位址,此時,分配的每個空間內存放的是int *型資料。
—–for(i=0;i<=n;i++)
a[i]=new int[n+1];
這裡的a[i]可以理解為int *a=new int裡面的a
所以把a當作二維陣列使用,就有a[i][j],這裡面存放的是int型數,即我們需要計算使用的數!
—–這裡有乙個優點:
此時在函式內使用時,不會因為傳值呼叫產生問題!
可以直接在函式外使用函式內已經處理過的二級指標a(或二維陣列)
比如在函式內賦值:a[1][2]=5;
《演算法設計與分析》 迴圈賽日程表
1 概述 其實現在分治法用的地方非常的多,分而治之,遞迴解決可以幫助我們提公升解決問題的效率 2 例子 設有n 2的k次方個運動員要進行網球的迴圈賽,現在需要射擊乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各賽一次 2 每個選手一天只能賽次 3 迴圈賽一共進行n 1天 3 解決方...
遞迴與分治策略 2 11迴圈賽日程表
設有n 2 k個運動員要進行網球迴圈賽,現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各賽一次 2 每個選手一天只能賽一次 3 迴圈賽一共進行n 1天。按此要求在表中第i行和第j列處填入第i個選手在第j天所遇到的選手。按分治策略,將所有的選手分為兩半,n個選手的比賽日程表就...
C 陣列指標 指標陣列與二級指標
二級指標 測試 陣列指標是指標,意為指向陣列的指標 指標陣列是陣列,意為陣列內部儲存著指標的陣列。陣列指標具有如下特性1 陣列指標用於指向乙個陣列 陣列名是陣列首元素的起始位址,但不是陣列的起始位址,通過取位址符 作用域陣列名可以得到陣列的起始位址 可以通過陣列型別定義陣列指標如 arraytype...