以前もグリーディー法の問題でトピックを立てさせていただいたのですが,今度は別の入力ファイルから読み込んで解くという形式なのですが,ファイル入出力関数を使って読み込むのはわかるのですがそこで生じる先ほどの問題から変える部分をどうしたらいいかわかりません.
以下にソースコードを書き込むので何を補えばいいのか教えてください.
宜しくお願いします.
前回お世話になった質問:http://dixq.net/forum/viewtopic.php?f=3 ... 952#p76390
また,入力テキストファイルも(この形式で合っているかわからないのですが)記載します.それぞれSとがe前回の質問と同じようになっています.
#include<stdio.h>
#include<stdlib.h>
double calc(int S[9], int S_cost){
int e, count = 0;
// 有効な探査対象の個数を探す(a[e]が1の物)
for (e = 0; e < 9; e++){
if (S[e] == 1){
count++;
}
}
if (count == 0){
return -1;
}
return ((double)S_cost) / count;
}
int main(void){
int S_cost[] = {90, 34, 23, 30, 20, 98, 100, 2};
int i, j,k, min_n;
double min_cost, cost_buf;
FILE *fp;
char s[256];
if((fp = ("example_a.txt", "r")) == NULL){
printf("file open error!!\n");
exit(EXIT_FAILURE);
}
while (fgets(s, 256, fp) != NULL) {
printf("%s", s);
}
fclose(fp);
for(k=0; k<8; k++){
min_n = -1;
for(i = 0; i < 8; i++){
cost_buf = calc(S[i], S_cost[i]);
if (cost_buf != -1)
{
if(min_n == -1){
min_cost = cost_buf;
min_n = i;
}
else{
if(cost_buf < min_cost){
min_cost = cost_buf;
min_n = i;
}
入力テキストファイル
}
}
}
printf("コスト%.1f, i = %d\n",min_cost, (min_n)+1);
for(i =0; i < 9; i++){
if((S[min_n][i]) == 1)
for(j = 0; j < 8; j++){
if((S[j][i]) == 1)
S[j][i] = -1;
}
}
}
return 0;
}