分形(找规律)
8位选手的循环比赛表可以由四名选手的循环比赛表根据对称性“生成出来”分治思想:不断的把一个规模为n的问题分成4个规模为n/2的子问题//左上角(a1,b1),右下角(a2,b2),[begin, end]的数字组成void makelist(int a1, int b1, int a2, int b2, int begin, int end){ //问题的边界 if (begin == end){ a[a1][b1] = begin; return ; } //求解子问题 //分成四个区域,左上角区域的右下角坐标是(a3, b3) int a3 = (a1 + a2) / 2, b3 = (b1 + b2) / 2; int mid = (begin + end) / 2; makelist(a1, b1, a3, b3, begin, mid); //左上角区域 makelist(a1, b3+1, a3, b2, mid+1, end); //右上角区域 makelist(a3+1, b1, a2, b3, mid+1, end); //左下角区域 makelist(a3+1, b3+1, a2, b2, begin, mid); //右下角区域}//函数调用makelist(1, 1, n, n, 1, n); //左上角(1,1),右下角(n,n),由1~n数字组成// 这道题目也可以用从小大到递推出来整个地图
//分形,著名的通过一定规律无限包含自身的“分形”图。