Java实现 蓝桥杯VIP 算法训练 比赛安排

问题描述
  设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。
输入格式
  输入文件matchplan.in共一行,输入n的数值。
输出格式
  输出文件matchplan.out共(2 n – 1)行,第i行输出第i天的比赛安排。
  格式为: A-B,C-D,……。其中i是天数,A,B分别为比赛双方的编号,每行共2 n-1个比赛场次。
样例输入
2
样例输出
<1>1-2,3-4
<2>1-3,2-4
<3>1-4,2-3

import java.util.Arrays;
import java.util.Scanner;


public class 比赛安排 {
	public final static int size=1<<6;
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		int a[][]=new int[size+1][size+1];
		int v[]=new int[size+1];
		int n=s.nextInt();
		int len=(int) Math.pow(2, n);
		for(int i=1;i<=len-1;i++) {
			Arrays.fill(v, 0);
			System.out.print("<"+i+">");
			for (int j = 1; j <= len / 2; j++) {
				for (int k = 1; k <= len; k++) {
					if (v[k] == 1) {
						continue;
					}
					for (int h = 1; h <= len; h++) {
						if (h == k) {
							continue;
						}
						if (v[h] == 1) {
							continue;
						}
						if (a[h][k] == 0 && a[k][h] == 0) {
							System.out.print(k + "-" + h + " ");
							v[k] = 1;
							v[h] = 1;
							a[k][h] = 1;
							a[h][k] = 1;
							break;
						}
					}
				}
			}
			System.out.println();
		}
		
		}


}

posted @ 2019-06-18 09:58  南墙1  阅读(52)  评论(0编辑  收藏  举报