八皇后 (hdu 2553):
#include<iostream>
using namespace std;
int vis[3][50], tot, a[4];
void search(int n, int cur)
{
int i;
if (cur == n)
{
tot++;
}
else for (i = 0; i < n; i++)
{
if (!vis[0][i] && !vis[1][i + cur] && !vis[2][cur - i + n])
{
a[cur] = i;
vis[0][i] = vis[1][i + cur] = vis[2][cur - i + n] = 1;
search(n, cur + 1);
vis[0][i] = vis[1][i + cur] = vis[2][cur - i + n] = 0;
}
}
}
int main()
{
int n;
int num[11];
for (int i = 0; i < 4; i++)
a[i] = -1;
search(8, 0);
return 0;
}
素数环(hdu 1016):
#include<iostream>
using namespace std;
int isp[40], a[21],vis[20], tot = 0,flag;
int is_prime(int n)
{
for (int i = 2; i*i <= n; i++)
if (n%i == 0)
return 0;
return 1;
}
void dfs(int n, int cur)
{
int i, j;
if (cur - 1 == n)
{
if (isp[a[1] + a[n]])
{
for (i = 1; i <= n; i++)
{
if (i == n)
printf("%d", a[i]);
else
printf("%d ", a[i]);
}
printf("\n");
}
}
else for (i = 2; i <= n; i++)
{
/*flag = 1;
for (j = 1; j < cur; j++)
{
if (a[j] == i)
{
flag = 0;
break;
}
}
if (flag && isp[i + a[cur - 1]])
{
a[cur] = i;
dfs(n, cur + 1);
}*/
if (!vis[i] && isp[i + a[cur - 1]])
{
a[cur] = i;
vis[i] = 1;
dfs(n, cur + 1);
vis[i] = 0;
}
}
}
int main()
{
int n;
a[1] = 1;
for (int i = 1; i < 40; i++)
isp[i] = is_prime(i);
while (cin >> n)
{
memset(vis, 0, sizeof(vis));
tot++;
cout << "Case " << tot << ":" << endl;
dfs(n, 2);
cout << endl;
}
}
困难的串(hdu 1627):
#include<iostream>
using namespace std;
int a[160],cnt;//129 6
int dfs(int n, int L, int cur)
{
int i, j, k;
if (n == cnt++)
{
for (i = 1; i <= cur; i++)
{
printf("%c", 'A' + a[i - 1]); // 将整型转换为字符输出
if (i % 64 == 0 && cur > 64)
printf("\n");
else if (i % 4 == 0 && i !=cur)
printf(" ");
}
printf("\n%d\n", cur);
return 1;
}
else for (i = 0; i < L; i++)
{
int ok = 1;
a[cur] = i;
for (j = 1; j * 2 <= cur + 1; j++)
{
int flag = 1;
for (k = 0; k < j; k++)
{
if (a[cur - k] != a[cur - k - j])
{
flag = 0;
break;
}
}
if (flag)
{
ok = 0;
break;
}
}
if (ok)
if (dfs(n, L, cur + 1))
return 1;
}
return 0;
}
int main()
{
int n, L;
while (cin >> n >> L)
{
memset(a, 0, sizeof(a));
if (n == 0 && L == 0)break;
cnt = 0;
dfs(n, L, 0);
}
}