本文共 1318 字,大约阅读时间需要 4 分钟。
#includebool vis[13];int a[13];int num[9]= {2,4,5,6,7,9,10,11,12};bool judge(int *a) { int t1 = a[1] +a[2] + a[3] + 8; int t2 = a[4] + a[7] + 3 + 8; int t3 = 1 + a[1] + a[4] + a[6]; int t4 = 1 + a[2] + a[5] + a[9]; int t5 = a[6] + a[7] + a[8] + a[9]; int t6 = a[3] + a[5] + a[8] + 3; if(t1 == t2 && t2 == t3 && t3 == t4 && t4 == t5 && t5 == t6)//巧妙比较6个数相等 return true;// for(int i = 0; i < 6; ++i){// for(int j = i+1; j < 6; ++j){// if(t[i] != t[j])// return false;// }// } return false; }void dfs(int pos) { if(pos == 10){ if(judge(a)){ printf("%d\n",a[4]); return ; } return ; } for(int i = 0; i < 9; ++i){ if(!vis[num[i]]){ vis[num[i]] = true; a[pos] = num[i]; dfs(pos+1); vis[num[i]] = false; } } }int main() { dfs(1); return 0; }
#includebool vis[13];int a[13];int num[5]= {2,4,5,6,7};//这个数组保存了待全排列的数void dfs(int pos) { if(pos == 5){//若以下标为0开始 则 pos到达元素位数即可终止了 for(int i = 0; i < 5; ++i){ printf("%3d",a[i]); } printf("\n"); return ; } for(int i = 0; i < 5; ++i){ if(!vis[num[i]]){//关键在这里 vis[num[i]] = true; a[pos] = num[i];//这里不在是i而是num[i] dfs(pos+1); vis[num[i]] = false; } } } int main() { dfs(0); return 0; }
转载地址:http://aqimi.baihongyu.com/