組み合わせ問題について
Posted: 2012年1月08日(日) 23:28
初めて質問するので勝手がわからないのですがどうぞよろしくお願いいたします。
http://yoshiiz.blog129.fc2.com/blog-entry-120.html
↑このURLを参考に組み合わせ問題を解こうとしています。
ソースはこれです↓
#include <stdio.h>
int next_perm(int *p, int n)
{
int i, j, k, tmp;
for(i = n - 1; i > 0 && p[i-1] >= p; i--);
if(i == 0) return 0;
for(j = n - 1; j > i && p[i-1] >= p[j]; j--);
tmp = p[i-1], p[i-1] = p[j], p[j] = tmp;
for(k = 0; k <= ((n-1)-i)/2; k++){
tmp = p[i+k], p[i+k] = p[(n-1)-k], p[(n-1)-k] = tmp;
}
return 1;
}
int main(void)
{
char s[5] = {'a', 'b', 'c', 'd', 'e'};
int p[5] = {0, 0, 0, 1, 1};
int i;
do {
for(i = 0; i < 5; i++)
if(p == 0) printf("%c", s);
printf("\n");
} while(next_perm(p, 5));
return 0;
}
abcdeの5組の中から3組をこのように↓選んで表示することは自分で確認しました。
abc
abd
abe
acd
ace
ade
bcd
bce
bde
cde
そこで質問なのですが、仮にa市、b市、c市、d市、e市の人口を{100,200,300,400,500}のように設定した場合、
以下のように表現したいです。どのようなプログラムを作成すればいいでしょうか。
abc={100,200,300}=600
abd={100,200,400}=700
abe={100,200,500}=800
acd={100,300,400}=800
ace={100,300,500}=900
ade={100,400,500}=1000
bcd={200,300,400}=900
bce={200,300,500}=1000
bde={200,400,500}=1100
cde={300,400,500}=1200
http://yoshiiz.blog129.fc2.com/blog-entry-120.html
↑このURLを参考に組み合わせ問題を解こうとしています。
ソースはこれです↓
#include <stdio.h>
int next_perm(int *p, int n)
{
int i, j, k, tmp;
for(i = n - 1; i > 0 && p[i-1] >= p; i--);
if(i == 0) return 0;
for(j = n - 1; j > i && p[i-1] >= p[j]; j--);
tmp = p[i-1], p[i-1] = p[j], p[j] = tmp;
for(k = 0; k <= ((n-1)-i)/2; k++){
tmp = p[i+k], p[i+k] = p[(n-1)-k], p[(n-1)-k] = tmp;
}
return 1;
}
int main(void)
{
char s[5] = {'a', 'b', 'c', 'd', 'e'};
int p[5] = {0, 0, 0, 1, 1};
int i;
do {
for(i = 0; i < 5; i++)
if(p == 0) printf("%c", s);
printf("\n");
} while(next_perm(p, 5));
return 0;
}
abcdeの5組の中から3組をこのように↓選んで表示することは自分で確認しました。
abc
abd
abe
acd
ace
ade
bcd
bce
bde
cde
そこで質問なのですが、仮にa市、b市、c市、d市、e市の人口を{100,200,300,400,500}のように設定した場合、
以下のように表現したいです。どのようなプログラムを作成すればいいでしょうか。
abc={100,200,300}=600
abd={100,200,400}=700
abe={100,200,500}=800
acd={100,300,400}=800
ace={100,300,500}=900
ade={100,400,500}=1000
bcd={200,300,400}=900
bce={200,300,500}=1000
bde={200,400,500}=1100
cde={300,400,500}=1200