#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define n 7
#define c 5
int bestw,cp,cw;
int x[n + 1];
int p[n + 1][n + 1];
int w[n + 1][n + 1];
void traceback(int i) {
if (i > n) {
bestw = cw;
for (int k = 1; k <= n; k++)
printf("%d", x[k]);
}
for (int j = 1; j <= n; i++) {
x[i] = j;
cw += w[i][j];
cp += p[i][j];
if (cw < bestw && cp < c) {
traceback(i + 1);
}
cw -= w[i][j];
cp -= p[i][j];
}
}
#define n 10
int p[n + 1][n + 1], q[n + 1][n + 1];
int max, temp;
int r[n + 1];
void swap(int i, int j) {
}
void ball(int i) {
if (i > n) {
if (temp > max) {
max = temp;
for (int i = 1; i <= n; i++)
printf("%d", r[i]);
}
}
for (int j = i; j <= n; j++) {
swap(r[i], r[j]);
temp += p[j][r[j]] * q[r[j]][j];
ball(i + 1);
temp -= p[j][r[j]] * q[r[j]][j];
swap(r[i], r[j]);
}
}
int _f3n1(int x,int sum) {
if (x == 1)
return sum;
if (x >= 1) {
if (x % 2 == 0) {
_f3n1(x/2, ++sum);
}
else {
_f3n1(x*3+1, ++sum);
}
}
}
int score = 0;
int max = 0;
int gun(int a[], int b[],int t,int j) {
if (t > n) {
if (score > max)
max = score;
return;
}
else {
if (a[t] == b[j]) {
score++;
gun(a,b,t + 1,j+1);
}
gun(a, b, t+1, j);
gun(a, b, t + 1, j+1);
return;
}
}
#define m 3
#define n 5
int x[n + 1];
int g[n + 1][n + 1];
int sum;
bool iscolor(int i) {
for (int j = 1; j < i; j++)
if (g[i][j] * x[i] == x[j])
return false;
return true;
}
void traceback(int i) {
if (i > n) {
sum++;
for (int j = 1; j <= n; j++)
printf("%d", x[j]);
return;
}
else {
for (int k = 1; k <= m; k++) {
x[i] = k;
if (iscolor(i))
traceback(i + 1);
x[i] = 0;
}
}
}
#define n 7
int count, sum = 0;
int half = (1 + n) * n / 4;
int x[n + 1][n + 1];
void traceback(int t) {
if ((count > half) || (t * (t - 1) / 2 - count > half))
return;
if (t > n)
sum++;
else {
for (int i = 0; i <= 1; i++) {
x[1][t] = i;
count += i;
for (int j = 2; j <= t; j++) {
x[j][t - j + 1] = x[j - 1][t - j + 1] && x[j - 1][t - j + 2];
count += x[j][t - j + 1];
}
traceback(t + 1);
for (int j = 2; j <= t; j++)
count -= x[j][t - j + 1];
count -= i;
}
}
}
int A[10][10];
int x[10];
int best, cc, bestx[10];
#define n 10;
void swap(int i, int j) {
}
void traveling(int i) {
if (i == n) {
if (A[x[i - 1]][x[i]] && A[x[i]][1] && cc + A[x[i - 1]][x[i]] + A[x[i]][1] <= best) {
best = cc + A[x[i - 1]][x[i]] + A[x[i]][x[1]];
for (int j = 1; j <= n; j++)
bestx[j] = x[j];
}
}
else {
for (int j = i; j <= n; j++) {
if (A[x[i - 1]][x[j]] && cc + A[x[i - 1]][x[j]] <= best) {
swap(x[i], x[j]);
cc += A[x[i - 1]][x[j]];
traveling(i + 1);
cc -= A[x[i - 1]][j];
swap(x[i], x[j]);
}
}
}
}
#define n 8
bool line[n + 1];
bool isplace;
int x[n + 1];
int count = 0;
void Generatep(int j) {
if (j == n + 1) {
count++;
for (int k = 1; k <= n; k++) {
printf("%d ", x[k]);
}
printf("\n");
return;
}
for (int i = 1; i <= n; i++) {
if (line[i]) {
isplace = 1;
for (int pre = 1; pre < j; pre++) {
if (abs(j - pre) == abs(i - x[pre])&&(x[j]==x[pre])) {
isplace = 0;
break;
}
}
if (isplace) {
x[j] = i;
line[i] = false;
Generatep(j + 1);
line[i] = true;
}
}
}
}
#define x 5
#define y 5
int sum = 0;
char maze[x][y];
int _maze(int a, int b) {
if (maze[a][b] == 'E') {
sum++;
return;
}else{
maze[a][b] = 1;
if (maze[a][b] == 'X' || maze[a][b] == 1)
return;
if (a == -1 || a == x || b == -1 || b == y)
return;
_maze(a, b - 1);
_maze( a,b + 1);
_maze(a - 1, b);
_maze( a + 1, b);
}
return sum;
}
void horse(int num ) {
for (int i = 0; i < num; i++) {
int x1, y1, x2, y2;
scanf_s("%d%d%d%d", &x1, &y1, &x2, &y2);
int min = 999;
int min=tracebackhores(x1, y1, x2, y2,min);
printf("%d", min);
}
}
int step=0;
int tracebackhores(int x1, int y1, int x2, int y2, int min) {
int a[8][2] = { {2,1} ,{2,-1} ,{-2,1} ,{-2,-1} ,{1,2} ,{-1,2}, {1,-2} ,{-1,-2} };
if (x1 == y1 && x2 == y2) {
if (step < min)
min = step;
step = 0;
return min;
}
else {
for (int i = 0; i < 8; i++) {
if (x1 < 0 || x1>26 || y1 < 0 || y1>10)
return;
step++;
int temp=tracebackhores(x1+a[i][0], y1+a[i][1], x2, y2, min);
if (temp >= min)
return;
}
}
}
#define m 10
#define n 10
int max=0,sum;
int p[m+1][n+1];
void peaunt() {
int t,i,j;
scanf("%d", t);
for (int z = 0; z < t; z++) {
sum = 0;
for (i = 1; i <= m + 1; i++)
for (j = 1; j <= n + 1; j++)
if (i > m || j > n)
p[i][j] = 0;
else scanf("%d", p[i][j]);
traceback(1, 1);
printf("%d", sum);
}
}
void traceback(int a,int b) {
if (a == m && b == n) {
if (sum > max)
max = sum;
return;
}
else {
if (a > m || b > n)
return;
sum += p[a][b];
traceback(a + 1, b);
sum -= p[a + 1][b];
traceback(a, b + 1);
sum -= p[a][b + 1];
}
}
int min(int a, int b) {
if (a > b)
return b;
else return a;
}
int max2(int a, int b) {
if (a > b)
return a;
else return b;
}
int ma = 999, mb = 0;
int ans[n],nn=0;
int edge[n][n];
void dfstravel() {
for (int i = 0; i < n; i++) {
int a, b;
scanf("%d%d", &a, &b);
edge[a][b] = 1;
edge[b][a] = 1;
ma = min(ma, min(a, b));
mb = max2(mb, max2(a, b));
}
dfs(1);
for (int i = nn - 1; i > 0; i--)
printf("%d", ans[i]);
}
void dfs(int t) {
for (int i = 0; i < n; i++) {
if (edge[t][i] == 1) {
edge[t][i]--;
edge[i][t]--;
dfs(i);
}
}
nn++;
ans[nn] = t;
}
void mouse(int t, int len) {
if (nn == len) {
nn--;
ww = 0;
rr = 0;
return;
}
for (int i = 0; i < 2; i++) {
nn++;
if (t == 0)
ww++;
if (t == 1)
rr++;
if (ww == 0 || ww % 2 == 0)
sum++;
mouse(i, len);
}
}
void mou(int t, int a, int b) {
for (int i = a; i <= b; i++)
mouse(0, i);
printf("%d", sum);
}
int k = 4;
int scr = 0, dst = 3;
int fee = 0,minfee=0;
int time = 0;
typedef struct graph {
int edge[n][n];
};
void airtravel(graph g,int t) {
if (t == dst) {
if (fee < minfee)
minfee = fee;
return;
}
else {
if (fee > minfee || time > k)
return;
for (int i = 0; i <= n; i++) {
if (g.edge[t][i] != 0) {
time++;
fee += g.edge[t][i];
airtravel(g, i + 1);
time--;
fee -= g.edge[t][i];
}
}
}
}
int main() {
int a = 1, b = 20,max=0, k;
for (int i = a; i <= b; i++) {
k=_f3n1(i,1);
if (k > max)
max = k;
}
printf("%d", max);
system("pause");
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
scanf_s("%d", &g[i][j]);
traceback(1);
printf("%d", sum);
int a, b, w;
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++) {
scanf("%d%d%d", a, b, w);
A[i][j] = w;
}
for (int i = 1; i <= n; i++) {
x[i] = 0;
bestx[i] = 0;
}
x[1] = 1;
best = 999;
cc = 0;
traveling(2);
printf("最优解为%d", best);
for (int j = 1; j <= n; j++)
printf("%d", bestx[j]);
for (int m = 0; m <= 8; m++) {
line[m] = true;
}
Generatep(1);
printf("%d\n", count);
system("pause");
}
int sum,ww=0,rr=0,nn=0;