循环赛事
package com.ycit.sportsschedule;
public class SportsSchedule {
public void sportsSchedule(int n,int[][] tables){
if(n==1){
tables[0][0]=1;
}else{
//填充左上角
int m = n/2;
sportsSchedule(m,tables);
//填充右上角
for(int i=0;i<m;i++){
for(int j =m;j<n;j++){
tables[i][j]=tables[i][j-m]+m;
}
}
//填充左下方
for(int i=m;i<n;i++){
for(int j=0;j<m;j++){
tables[i][j]=tables[i-m][j]+m;
}
}
//填充右下方
for(int i=m;i<n;i++){
for(int j=m;j<n;j++){
tables[i][j]=tables[i-m][j-m];
}
}
}
}
public static void main(String[] args) {
int [][] tables =new int[8][8];
int n=8;
SportsSchedule schedule =new SportsSchedule();
schedule.sportsSchedule(n, tables);
int c = 0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(tables[i][j]+" ");
c++;
if(c%8==0){
System.out.println();
}
}
}
}
}
L型棋盘问题
package com.ycit.chessboradproblem;
public class ChessBoradProblem {
private int[][] board;
private int size;
private int specialRow; //特殊点行下标
private int specialCol; //特殊点列下标
private int type=0;
public ChessBoradProblem(int specialRow,int specialCol,int size){
super();
this.specialCol=specialCol;
this.specialRow=specialRow;
this.size = size;
board = new int[size][size];
}
public void ChessBoary(int specialRow,int specialCol,int leftRow,int leftCol,int size){
if(size==1){
return;
}
int subsize = size/2;
type = type%4+1;
int n = type;
//假设特殊点在左上方
if(specialRow<leftRow+subsize&&specialCol<leftCol+subsize){
ChessBoary(specialCol,specialCol,leftRow,leftCol,subsize);
}else{
//不在左上方区域的右下方为特殊点
board[leftRow+subsize-1][leftCol+subsize-1]=n;
ChessBoary(leftRow+subsize-1,leftCol+subsize-1,leftRow,leftCol,subsize);
}
//特殊点在右上方
if(specialRow<leftRow+subsize&&specialCol>=leftCol+subsize){
ChessBoary(specialCol,specialCol,leftRow,leftCol+subsize,subsize);
}else{
board[leftRow+subsize-1][leftCol+subsize]=n;
ChessBoary(leftRow+subsize-1,leftCol+subsize,leftRow,leftCol+subsize,subsize);
}
//特殊点在左下方
if(specialRow>leftRow+subsize&&specialCol<specialCol-1){
ChessBoary(specialCol,specialCol,leftRow+subsize,leftCol,subsize);
}else{
board[leftRow+subsize][leftCol+subsize-1]=n;
ChessBoary(leftRow+subsize-1,leftCol+subsize,leftRow+subsize,leftCol,subsize);
}
//特殊点在右下方
if(specialRow>=leftRow+subsize&&specialCol>=specialCol+subsize){
ChessBoary(specialCol,specialCol,leftRow+subsize,leftRow+subsize,subsize);
}else{
board[leftRow+subsize][leftCol+subsize]=n;
ChessBoary(leftRow+subsize,leftCol+subsize,leftRow+subsize,leftRow+subsize,subsize);
}
}
public void printBoard(int specialRow,int specialCol,int size){
ChessBoary(specialRow, specialCol, 0, 0, size);
printResult();
}
private void printResult() {
for(int i = 0;i<size;i++){
for(int j = 0;j<size;j++){
System.out.print(board[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args) {
int N = 8;
int specialRow = 0;
int specialCol = 1;
ChessBoradProblem boradProblem = new ChessBoradProblem(specialRow, specialCol, N);
boradProblem.printBoard(specialRow, specialCol, N);
}
}