關於循環賽日程表的問題(王曉東的多邊形解法) -开发者知识库
多邊形法(王曉東算法設計與分析教材上的實現,比較費解,比較牛逼)
#include <stdio.h>
#define N 1000
int a[N][N];
int b[N];
inline bool odd(int n)
{
return n & 1;
}
void init()
{
int i;
for(i=0;i<N; i)
a[i][0]=i;
}
void tour(int n)
{
a[n][1]=n;
if(n==1) return;
int m=odd(n) ? n : n-1;
int i,j,k,r;
for(i=1;i<=m; i)
{
a[i][1]=i;
b[i]=i 1;
b[m i]=i 1;//這里開辟多一倍空間的意圖是什么?
}
for(i=1;i<=m; i)
{
a[1][i 1]=b[i];
a[b[i]][i 1]=1;
for(j=1;j<=m/2; j)
{
//下面前兩句看不懂,只知道后兩句是賦值[i 1]列的,而且邏輯也搞不懂,但畫圖出來一看也沒什么問題。
k=b[i j];
r=b[i m-j];
a[k][i 1]=r;
a[r][i 1]=k;
}
}
}
void out(int n)
{
if(n==1)
{
printf("1\n");
return;
}
int i,j;
int m;
if(odd(n))
m=n 1;
else
m=n;
for(i=1;i<=n; i)
{
for(j=1;j<=m; j)
{
if(a[i][j]>n)
printf("0 ");
else
printf("%d ",a[i][j]);
}
printf("\n");
}
}
int main()
{
int n;
init();
while(scanf("%d",&n),n)
{
tour(n);
out(n);
}
return 0;
}
5 个解决方案
#1
還有,網上的一些關於多邊形解法的算法思路,我畫了一下圖,感覺不對,先給個連接
http://blog.csdn.net/sugite/article/details/7190682
例如八個人循環時,奇數對的永遠是偶數,不能對全,而且剛好重復一倍,那個多邊形的算法是不是錯的?我沒編譯過,不知道正誤,時間太緊了。
PS:會的請幫幫忙,這道題我看了好幾個小時了,叫我好好看書的,我只能回一句:我去年買了個包。我討厭這種人
http://blog.csdn.net/sugite/article/details/7190682
例如八個人循環時,奇數對的永遠是偶數,不能對全,而且剛好重復一倍,那個多邊形的算法是不是錯的?我沒編譯過,不知道正誤,時間太緊了。
PS:會的請幫幫忙,這道題我看了好幾個小時了,叫我好好看書的,我只能回一句:我去年買了個包。我討厭這種人
最佳答案:
本文经用户投稿或网站收集转载,如有侵权请联系本站。
0条回复