ページ 11

for文がわかりません

Posted: 2011年7月20日(水) 22:40
by doug
以下のプログラムにおいて、
ある1つ目の地点から2つ目の地点に移動し、また1つ目の地点に戻る往復移動コストが最小になるような2地点を求めるプログラムを作成したいのです。
例えば、地点0から地点1への移動コストは5であり、このコストが最小にしたいのです。


costとprintfの間をfor文で作成したいのですがわかりません。


コード:

#include< stdio.h >
#include< string.h >

void main()
{
	int cost[10][10]={ {0,5,2,3,8,2,8,5,3,9},
					   {3,0,4,5,4,6,7,1,9,2},
					   {5,5,0,8,7,8,9,9,6,7},
					   {9,8,7,0,7,4,6,7,3,6},
					   {8,7,5,6,0,6,4,6,7,9},
					   {6,6,6,7,8,0,9,9,9,9},
					   {4,4,5,6,9,8,0,5,6,7},
					   {7,7,8,6,8,5,8,0,6,6},
					   {8,9,8,9,7,9,4,5,0,5},
					   {6,5,4,5,3,5,6,7,8,0} };
	
	
	
	printf("1つ目の地点は%dです。\n",);
	printf("2つ目の地点は%dです。\n",);
	printf("そのときのコストは%dです。\n",);
}

Re: for文がわかりません

Posted: 2011年7月20日(水) 22:55
by box
要するに、その配列の中で、ゼロでない最小値(あるいはその2倍の値)を
見つけたい、ということでしょうか?

Re: for文がわかりません

Posted: 2011年7月20日(水) 23:06
by non
セールスマン問題とは違いますよね。
意味がわかりません。もう少し、説明してもらわないと、わかりません。
配列の見方は?
>地点0から地点1への移動コストは5であり
帰りのコストは3ですか?往復のコストなら8というわけではないのですか?
それとも、ほかの地点を経由しても可ということでしょうか?

>costとprintfの間をfor文で作成したいのですがわかりません。
これも意味不明です。

Re: for文がわかりません

Posted: 2011年7月20日(水) 23:14
by dong
往路と復路でコストが異なるようにしたいです。

地点0から地点1への往復コストは5+3=8であります。

コストが最小になるような2地点の組合せが複数ある場合は、どれか1つだけを表示すれば良いです。

1つ目と2つ目の地点は異なる地点にしたいです。

Re: for文がわかりません

Posted: 2011年7月20日(水) 23:28
by box
dong さんが書きました:往路と復路でコストが異なるようにしたいです。
異なるようにしたい、というよりは、異なるように配列の要素値を設定してある、ということじゃないんですか?

まあ、それはさておくとして、
cost[j] + cost[j] (ただし、iとjは異なる)
の最小値を求めたい、ということでしょうか。

Re: for文がわかりません

Posted: 2011年7月20日(水) 23:42
by dong
そうです。

cost[j] + cost[j]の最小値を求めたいのです。

Re: for文がわかりません

Posted: 2011年7月20日(水) 23:51
by box
値がゼロである対角線の上側の三角形だけ、または下側の三角形だけをたどるような
2重のループ(for文を使用)を書くことはできますか?

Re: for文がわかりません

Posted: 2011年7月20日(水) 23:57
by dong
そこがわからないのです。

Re: for文がわかりません

Posted: 2011年7月21日(木) 00:02
by box
ある程度予想していたことではありますが、ずいぶんレスポンスが早いですね。
よく考えた結果ですか?

例えば、対角線の上側にある三角形に着目すると、
i が 0 のとき、j はどこからどこまでをたどればいいですか?
i が 1 のとき、j はどこからどこまでをたどればいいですか?
...
i が 9 のとき、j はどこからどこまでをたどればいいですか?

j がたどる範囲について、何か法則は見えませんか?
そこのところを『ご自分の頭で』よく考えていただきたいです。

よく考えれば考えるだけ、プログラミング能力が向上すると思います。個人的には。
質問者さんは、そう思いませんか?

Re: for文がわかりません

Posted: 2011年7月21日(木) 00:05
by dong
ヒントありがとうございます。

頑張ってみます。