一開始要先將初始字串設定好:
scanf("%d %d", &m, &h);再用與 Problem 146 的 next_permutation 函式或 C ++ 中的 next_permutation 的方法,持續找尋下一組的排列組合並且印出,直到找不到為止。C 語言程式碼如下:
for (j = 0; j < m; j ++)
{
if (j < m - h) str[j] = '0';
else str[j] = '1';
}
str[m] = '\0';
void swap(int i, int j)最後只需要在主程是內如此呼叫:
{
char tmp;
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
int next_permutation()
{
int i, j, k;
int length;
length = strlen(str);
for(i = length - 1;i > 0 ; --i)
if(str[i - 1] < str[i]) break;
j = i;
if(j == 0) return 0;
for(i = length - 1;i > 0; --i)
if(str[j - 1] < str[i]) break;
k = i;
swap(j - 1, k);
for(i = j, j = length - 1;i < j; ++ i, -- j)
swap(i, j);
return 1;
}
printf("%s\n", str);By David.K
while (next_permutation())
{
printf("%s\n", str);
}
p729題目連結
回ACM題庫目錄
回首頁
沒有留言:
張貼留言