1. 程式人生 > >比賽日程安排演算法

比賽日程安排演算法

這幾天看都一個ITAT比賽的一道題 題目是這樣的

1、    設有n個球隊要進行排球迴圈賽,設計一個滿足以下要求的比賽日程表:

a)         每個球隊必須與其他n-1個球隊各賽一次;

b)        每個球隊一天只能賽一次;

c)         當n是偶數時,迴圈賽進行n-1天。當n是奇數時,迴圈賽進行n天。

n=6的比賽日程表示例(把6個隊從1到6進行編號):

n=6的比賽日程表

第一天

第二天

第三天

第四天

第五天

1~2

1~3

1~4

1~5

1~6

3~5

2~4

2~5

2~6

2~3

4~6

5~6

3~6

3~4

4~5

n=5的比賽日程表示例(增加編號0,凡碰0者該天即輪空):

n=5的比賽日程表

第一天

第二天

第三天

第四天

第五天

1~0

1~5

1~4

1~3

1~2

2~5

0~4

5~3

4~2

3~0

3~4

2~3

0~2

5~0

4~5

想了好久也看了很多參考資料  什麼分治演算法 。(看的不是很明白)

  後來在貼吧上看的有人跟了個很棒的思路!

------------------------------------------------------------------------------------------------

以6隊為例,用數字表示,排成一個環形。
1號隊不動,每一輪,逆時針轉動,讓各隊從1號頭上依次跳過,每移位一次得出的對陣就是本輪對陣。
無論有多少個隊結果都是符合要求的
具體實現時用一個數組來處理就好了

---
1 4
2 5
3 6  
---
1 5
4 6
2 3
---
1 6
5 3
4 2
---
1 3
6 2
5 4
----
1 2
3 4
6 5
----------------------------------------------

由 ahyyxx222提供

確實簡單不少

我用了一個LinkedList實現

public class T{
	private int num; // 隊伍數

	private LinkedList<Integer> list = new LinkedList<Integer>();

	public T(int n)
	{
		this.num = n;
		init();
	}

	private void init()
	{
		if (num % 2 == 0)  //偶數個隊伍
		{
			for (int i = 0; i < num; i++)
			{
				list.add(i + 1);
			}
		}
		else  //奇數個隊伍
		{
			for (int i = 0; i < num; i++)
			{
				list.add(i + 1);
			}
			list.add(0);
		}

	}

	public void print()
	{
		for (int i = 0; i < list.size() - 1; i++)
		{
			System.out.println("第" + (i + 1) + "天");
			for (int j = 0; j < list.size() / 2; j++)
			{
				System.out.println(list.get(j) + "--"
						+ list.get(list.size() - 1 - j));
			}
			int temp = list.pollLast();  //移動
			list.add(1, temp);

		}
	}

相關推薦

比賽日程安排演算法

這幾天看都一個ITAT比賽的一道題 題目是這樣的 1、    設有n個球隊要進行排球迴圈賽,設計一個滿足以下要求的比賽日程表: a)         每個球隊必須與其他n-1個球隊各賽一次; b)        每個球隊一天只能賽一次; c)         當n是偶數時

分治演算法思想(4)未——兩個大數相乘,歐冠冠軍盃比賽日程安排

(1)分治演算法基礎解題一般步驟:1.分解,將要解決的問題劃分成若干規模較小的同類問題2.求解,當子問題劃分的足夠小時,用較簡單的方法解決3.合併,按原問題的要求,將子問題的解逐層合併構成原問題的解此方法主要是對分治的理解,以及結果的調整和對結果的合併。較難理解~需仔細思考(

比賽日程安排 hihoCoder1670

題意: 給M場比賽的時間和參賽的兩支隊伍,判斷這個日程安排是否可行。要求是每支隊伍連續兩場比賽之間至少間隔一天,即每支隊伍一天不能有兩場或更多場比賽,也不能連續兩天都有比賽。 思路: 由於給的資料不是按照日期順序給的,所以我們要先收集好資料在按照日期排

分治演算法:乒乓球比賽日程安排

乒乓球比賽的日程安排 問題: 設有n位選手參賽,初賽進行n-1天,每位選手每天必須比賽一次,不能輪空。程式設計求解賽程安排。 分析: 1、求n位選手的賽程安排,可採用分治演算法的思想,將問題規模不斷縮

演算法-分治法例項:迴圈賽日程安排問題

一、問題描述 設有 n(2^k)位選手參加網球迴圈賽,迴圈賽一共需要進行 n-1天,每位選手需要和其他的 n-1 位選手各比賽一場,不輪空。試著安排這個比賽的安排日程。 二、問題分析 本問題可以利用分治法來進行求解,設 n位選手被順序標號為1,2,

數學建模比賽日程

height logs 建模 src eight 技術分享 數學建模 圖論 .cn 7月5日 數模培訓圖論方法建模,討論數模分工 7月6日 數模培訓線性貴,(笨牛書店)買書 7月7日 數模培訓 數學建模比賽日程

日程安排

gmail blog -s idt 記錄 安排 有趣 height src 很有趣. 以後就用它來記錄生活+工作+學習了. 也用它來開展``會議‘‘. 日程安排

迴圈賽日程安排問題

設有n=2k個選手要進行網球迴圈賽,要求設計一個滿足以下要求的比賽日程表: (1)每個選手必須與其他n-1個選手各賽一次; (2)每個選手一天只能賽一次。         按此要求,可將比賽日程表設計成一個 n 行n-1列的二維表,其中,第 i 行

安卓手機上有什麼好用的日程安排管理軟體?

安卓手機上有什麼簡單好用的日程安排管理軟體? 在百度知道上有一個於此相關的問題,題主的要求十分明確,在這篇文章中,小編不妨以圖中的問題為基準,為大家介紹一款簡單好用的手機日程安排管理軟體。 1.分類管理待辦任務的日程管理軟體 敬業籤雲便籤是一款專為商務辦公族設計的桌面提醒便

java 遞迴實現迴圈比賽日程

在java實現迴圈比賽日程的程式中,主要運用的思想就是分治法。        分治法:通俗的理解就是在實際需要解決的問題當中,將大的問題分成小的問題,逐次分割,直到達到容易解決的範圍。然後再將分割的小域的解按一定規律組合在一起成為“母”

我的日程安排

實現一個 MyCalendar 類來存放你的日程安排。如果要新增的時間內沒有其他安排,則可以儲存這個新的日程安排。 MyCalendar 有一個 book(int start, int end)方法。它意味著在 start 到 end 時間內增加

Android帶日程安排的自定義日曆控制元件

前言:       本文實現的是,自定義的日曆控制元件,可以新增日程安排。       本篇是基於網上原始碼做的相應修改,本文只列出修改的內容,需要看原始碼博文的請到: 一、效果展示    二、日曆控制元件的修改      1、星期顯示中文           此處

基於FullCalendar外掛的個人日程安排系統(4)

這一篇開始要用到FullCalendar外掛,由於我自己也是頭一次用,也不是很瞭解,所以只能簡單介紹一下,大家可以一起討論。 效果圖 customer_index.jsp <%@ page language="java" content

[Swift]LeetCode732. 我的日程安排表 III | My Calendar III

lee output for each oca execute dex tex spa event Implement a MyCalendarThree class to store your events. A new event can always be added

ALGO-65演算法訓練 比賽安排 (陣列記錄判斷)

演算法訓練 比賽安排   時間限制:1.0s   記憶體限制:512.0MB      問題描述   設有有2 n(n<=6)個球隊進行單迴圈比賽,計劃在2 n – 1天內完成,每個隊

演算法訓練 比賽安排 C語言實現

問題描述   設有有2 n(n<=6)個球隊進行單迴圈比賽,計劃在2 n – 1天內完成,每個隊每天進行一場比賽。設計一個比賽的安排,使在2 n – 1天內每個隊都與不同的對手比賽。 輸入格式   輸入檔案matchplan.in共一行,輸入n的數值。 輸出格式   輸出檔案matchplan.out共

貪心演算法-活動安排問題

對於活動安排問題,該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了一個簡單漂亮的方法,使盡可能多的安排活動能相容的使用公共資源。 貪心演算法不能總是得到整體問題的最優解,但對於活動安排問題,貪心演算法卻總能得到整體的最優解。 可以將所有活動的開始時間、終止時間以及

貪心演算法(1)—— 活動安排問題 以及 電視節目問題 的區別

一、活動安排問題 #include <iostream> #include <algorithm> using namespace std; /* 題目型別:活動安排問題 特點:所有活動都需要進行,要求輸出所需的會場數 演算法:貪心演算法 注意

會場安排問題(貪心演算法) Comparator類排序的學習

主要是學習類如何進行排序利用  arrays  嗯 還有反正就是陣列排序的學習 程式碼: import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.PrintS

2018年全國多校演算法寒假訓練營練習比賽(第一場) Problem:H

問題H:方塊與收納盒                  時間限制:1 Sec 記憶體限制: 32768K Problem Des