poj 1256(Anagram+シークレット配列アルゴリズム)
1526 ワード
テーマリンク:http://poj.org/problem?id=1256
タイトルの意味:文字列a[15]は、これらの文字が構成されているすべての重複しない文字列を求める必要があります.
コードは大牛のところから借りています.
コード:
以下はこの問題を解く過程で探した「再帰的に完全な並べ替えアルゴリズムを求める」です.
再帰的に完全な配列を求めるアルゴリズムコード:
タイトルの意味:文字列a[15]は、これらの文字が構成されているすべての重複しない文字列を求める必要があります.
コードは大牛のところから借りています.
コード:
#include
#include
int n,len;
int hash[15]={0};
char a[54];
char ans[15];
int dfs(int k)
{
int i,j;
for(i=1;i<=52;i++)
if(hash[i]>0)
{
hash[i]--;
if(i % 2 == 0)
ans[k]=i/2+96;
else
ans[k]=(i+1)/2+64;
if(k == len-1)
{
for(j=0;j= 'A' && a[i] <= 'Z')
hash[(a[i]-64)*2-1]++;
else
hash[(a[i]-96)*2]++;
}
dfs(0);
}
return 0;
}
以下はこの問題を解く過程で探した「再帰的に完全な並べ替えアルゴリズムを求める」です.
再帰的に完全な配列を求めるアルゴリズムコード:
#include
inline void Swap(char& a, char& b)
{// a b
char temp = a;
a = b;
b = temp;
}
void Perm(char list[], int k, int m)
{ // list [k:m ]
int i;
if (k == m) {//
for (i = 0; i <= m; i++)
putchar(list[i]);
putchar('
');
}
else // list[k:m ]
//
for (i=k; i <= m; i++) {
Swap (list[k], list[i]);
Perm (list, k+1, m);
Swap (list [k], list [i]);
}
}
int main()
{
char s[]="123";
Perm(s, 0, 2);
return 0;
}