データ構造においては、隣接マトリックス方式で図を保存し、広さを優先し、深さを優先的にエルゴードする.


以下は作業であり、隣接行列で広さ優先と深さ優先のエルゴードを実現する.
コードは比較的簡単で、二時間かけて書きました.
 
//**は隣接マトリックスで図を保存し、広さ優先で遍歴します.
#include "stdio.h"
#define max_matrix 10

int visited[max_matrix],matrix[max_matrix][max_matrix];
int n;
int board_traverse();

int main()
{
    int i,j;
    scanf("%d",&n);
    if (n<1)
    {
        printf("n must be >1
"); exit(0); } if (n>max_matrix) { printf("n must be <%d
",max_matrix); exit(0); } for (i=0;i<n;i++) { visited[i]=0; for (j=0;j<n;j++) matrix[i][j] = 0; } while (scanf("%d %d",&i,&j)==2) { matrix[i-1][j-1]=1; } for(i=0;i<n;i++) { for (j=0;j<n;j++) printf("%d ",matrix[i][j]); printf("
"); } printf("1 "); board_traverse(0); } int board_traverse() { int temp,i,j,ma_j,ma_i; for (ma_i=0;ma_i<n;ma_i++) for (ma_j=ma_i;ma_j<n;ma_j++) if (matrix[ma_i][ma_j] && visited[ma_j]==0) { printf("%d ",ma_j+1); visited[ma_j]=1; } }
 
 /**隣接マトリクスとして図を保存し、深さ優先で遍歴します.
#include "stdio.h"
#define max_matrix 10

int visited[max_matrix],matrix[max_matrix][max_matrix];
int n;
int deep_traverse(int);

int main()
{
    int i,j;
    scanf("%d",&n);
    if (n<1)
    {
        printf("n must be >1
"); exit(0); } if (n>max_matrix) { printf("n must be <%d
",max_matrix); exit(0); } for (i=0;i<n;i++) { visited[i]=0; for (j=0;j<n;j++) matrix[i][j] = 0; } while (scanf("%d %d",&i,&j)==2) { matrix[i-1][j-1]=1; } for(i=0;i<n;i++) { for (j=0;j<n;j++) printf("%d ",matrix[i][j]); printf("
"); } printf("1->"); deep_traverse(0); } int deep_traverse(int ma_i) { int temp,i,j,ma_j; ma_j = ma_i; while (ma_j<n) { if (matrix[ma_i][ma_j] && visited[ma_j]==0) { printf("%d->",ma_j+1); visited[ma_j]=1; deep_traverse(ma_j); } ma_j++; } }