#6
by かずま » 7年前
masuter さんが書きました:ありがとぅございました。解決しました
どのようにして解決したのか、
および何が分からなかったのかを書いてください。
かずま さんが書きました:
理解できたら、分かりやすいプログラムに書き直して
提示してください。
と書いたのに、そのプログラムがありません。
次のようなものを期待していました。
コード:
#include <stdio.h>
int a[1000][2]; // 友達リスト
int b[500+1]; // 1 の友達 (0:友達ではない, 1:友達)
int c[500+1]; // 1 の友達の友達 (0:友達ではない, 1:友達)
int main(void)
{
int n; // 生徒数
int m; // 友達リストの要素数
int i, j;
int k = 0; // 1 の友達と、友達の友達の人数
scanf("%d%d", &n, &m);
for (i = 0; i < m; i++) // 友達リストをすべて
scanf("%d%d", &a[i][0], &a[i][1]); // 読み込む
for (i = 0; i < m; i++) { // 友達リストを見て
if (a[i][0] == 1) // 1 の友達であれば
b[a[i][1]] = 1; // 1 の友達に印付け
if (a[i][1] == 1) // 1 の友達であれば
b[a[i][0]] = 1; // 1 の友達に印付け
}
for (j = 2; j <= n; j++) // 1 を除く生徒全員について
if (b[j]) // j が 1 の友達であれば
for (i = 0; i < m; i++) { // 友達リストを見て
if (a[i][0] == j) // j の友達であれば
c[a[i][1]] = 1; // j の友達に印付け
if (a[i][1] == j) // j の友達であれば
c[a[i][0]] = 1; // j の友達に印付け
}
for (j = 2; j <= n; j++) // 1 を除く生徒全員から
if (b[j] || c[j]) k++; // 友達の数を数える
printf("%d\n", k);
return 0;
}
アルゴリズムは、最初の質問の「友達から得たヒント」にすべて
書かれていて、それを素直にコーディングしただけです。
タイトルが
「どのようなアルゴリズムをつくればよいか全くわかりません」
となっていますが、
「どのようにコーディングすればよいか全くわかりません」
ということだったのでしょうか?
[quote="masuter" id=3,19685,148491]ありがとぅございました。解決しました[/quote]
どのようにして解決したのか、
および何が分からなかったのかを書いてください。
[quote="かずま" id=3,19685,148403]
理解できたら、分かりやすいプログラムに書き直して
提示してください。[/quote]
と書いたのに、そのプログラムがありません。
次のようなものを期待していました。
[code=c]
#include <stdio.h>
int a[1000][2]; // 友達リスト
int b[500+1]; // 1 の友達 (0:友達ではない, 1:友達)
int c[500+1]; // 1 の友達の友達 (0:友達ではない, 1:友達)
int main(void)
{
int n; // 生徒数
int m; // 友達リストの要素数
int i, j;
int k = 0; // 1 の友達と、友達の友達の人数
scanf("%d%d", &n, &m);
for (i = 0; i < m; i++) // 友達リストをすべて
scanf("%d%d", &a[i][0], &a[i][1]); // 読み込む
for (i = 0; i < m; i++) { // 友達リストを見て
if (a[i][0] == 1) // 1 の友達であれば
b[a[i][1]] = 1; // 1 の友達に印付け
if (a[i][1] == 1) // 1 の友達であれば
b[a[i][0]] = 1; // 1 の友達に印付け
}
for (j = 2; j <= n; j++) // 1 を除く生徒全員について
if (b[j]) // j が 1 の友達であれば
for (i = 0; i < m; i++) { // 友達リストを見て
if (a[i][0] == j) // j の友達であれば
c[a[i][1]] = 1; // j の友達に印付け
if (a[i][1] == j) // j の友達であれば
c[a[i][0]] = 1; // j の友達に印付け
}
for (j = 2; j <= n; j++) // 1 を除く生徒全員から
if (b[j] || c[j]) k++; // 友達の数を数える
printf("%d\n", k);
return 0;
}
[/code]
アルゴリズムは、最初の質問の「友達から得たヒント」にすべて
書かれていて、それを素直にコーディングしただけです。
タイトルが
「どのようなアルゴリズムをつくればよいか全くわかりません」
となっていますが、
「どのようにコーディングすればよいか全くわかりません」
ということだったのでしょうか?