C言語のイメージでよければ。
勉強と言う事でしたので、構造体のタイプデフ宣言。スタティック配列等を使いました。
再帰処理を使ってみました。
ここに直に書いたので、試験していません。コンパイルも通るか怪しいので、
意図を汲み取って、コンパイル含めて、デバッグしてみてください。
出題を見て思ったのですが、各ノードは受信したデータの中継をするのですか?
不明な点もあったので、固定的なデータを定められたリンクに従って送信する仕様にしました。
----------------------------------------------------------
#incluce <stdio.h>
/**************************************/
/* 各種宣言
/**************************************/
#define MAXDATANUM 10 // 今回送信するデータの最大数
#define MAXSENDNODE 10 // ノードの最大数
// 送信数と送信先テーブルの構造体
typedef struct {
int maxSendNode;
int sendId[MAXSENDNODE];
} SendRoot;
/**************************************/
/* プロトタイプ宣言
/**************************************/
int SendInf( int *cu , int id , int dat );
void SendDo ( int cu , int src , int dst , int dat );
/**************************************/
/* メイン関数
/**************************************/
void main( ing argc , char **argv)
{
// 仮データ整数で10個
static int dat[MAXDATANUM] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
int i, id, cu=0;
// 10個のデータを送信
for( i=0 ; i<MAXDATANUM ; i++ )
{
// 10ノードの送信処理を促す
SendInf( &cu , 0 , dat[i] );
}
printf( " Total Send Count = %d \n" , cu );
}
/**************************************/
/* データ同報ノード番号idがdatをマルチキャスト
/**************************************/
int SendInf( int *cu , int id , int dat)
{
static SendRoot sendRoot[MAXSENDNODE] = {
{ 3 , { 1 , 2 , 3} }, { 2 , { 8 , 4 } } , { 2 , { 4, 5 } },
{ 1 , { 5 } } , { 2 , { 7 , 6 } } , { 0 , { 0 }},
{ 0 , { 0 } } , { 0 , { 0 } } , { 1 , { 7 } }
};
int i;
if( id < 0 || id >= MAXSENDNODE ) return( 0 );
for( i=0; i<sendRoot[id].maxSendNode ; i++ )
{
SendDo( *cu , id , sendRoot[id].sendId[i] , dat );
*cu += 1;
SendInf( cu , sendRoot[id].sendId[i] , dat );
}
return( i );
}
/**************************************/
/* データ個報 ノード番号srcがdstにdatを送信
/**************************************/
void SendDo( int cu , int src , int dst , int dat )
{
printf( "%03d: [%03d]->(%03d)->[%03d]\n", cu , src , dat , dst );
}
補足
すいません書き漏らしです。 矢印でつながっている部分は全て送信すると考えてください。 4番は6番に送信します。 よって送信回数は1つの情報につき11回 10通で110回の送信を行うが正しいです。