スタックとキューについてアドバイスお願いします
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 8
void print_matrix(int a[][N]);
int main(void){
int stack[N],Adjacency_matrix[N][N],visit[N];
int top,i,j,count_l,k;
/*-------------------------------------------------------------------*/
//隣接行列の作成
srand(time(NULL));
for(i=0;i<8;i++){
for(j=0;j<8;j++){
Adjacency_matrix[i][j] = rand() % 2;
//printf("%d\n",Adjacency_matrix[i][j]);
if(i == j){
Adjacency_matrix[i][j] = 0;
}
}
//sleep(1);
}
//行列の表示
print_matrix(Adjacency_matrix);
/*------------------------------------------------------------------*/
//深さ優先探索開始。。。。
printf("-------------------------深さ優先探索------------------------\n");
//配列の初期化
for(i=0;i<8;i++){
visit[i] = 0; stack[i] = 0;
}
//topと出発点を定める。。。。。
top = 0; stack[top] = 0; top++;
printf("出発点は0です →");
//出発点を訪問済みと定義
visit[0] = 1;
for(k=0;k<8;k++){
for(i=0;i<8;i++){
if(Adjacency_matrix[0][i] == 1 && visit[i] == 0){
stack[top] = i;top++;visit[i] += 1;
printf("%d→",stack[top - 1]);
for(j=0;j<8;j++){
if(Adjacency_matrix[i][j] == 1 && visit[j] == 0){
stack[top] = j;top++; visit[j] += 1;
printf("%d→",stack[top - 1]);
break;
}
top--; stack[top] = -1;
}
}
}
top = 0;
for(i=0;i<8;i++){
if(visit[i] == 0){
stack[top] = i;top++;
visit[i] = 1;
printf("終了\n");
printf("出発点は%d→",i);
break; }
if(i == 7)break;
}
}
printf("終了\n");
/*-----------------------------------------------------------*/
//幅優先探索
printf("-------------------------幅優先探索-------------------------\n");
int queue[N];
int first,last;
first = 0; last = 0;
for(i=0;i<8;i++){
visit[i] = 0; queue[i] = 0;
}
//出発点を定める。。。。。
printf("出発点は0です →");
//出発点を訪問済みと定義
visit[0] = 1;
for(k=0;k<8;k++){
for(i=0;i<8;i++){
if(Adjacency_matrix[queue[first % N]][i] == 1 && visit[i] == 0){
queue[last] = i; last = (last + 1) % 8; visit[i] += 1;
printf("%d→",i);
}
if(i == 7){
queue[first] = -1; first = (first + 1) % 8;
}
}
first = 0; last = 0;
for(i=0;i<8;i++){
if(visit[i] == 0){
queue[last] = i;last++;
visit[i] = 1;
printf("終了\n");
printf("出発点は%d→",i);
break; }
if(i == 7)break;
}
/* printf("\n");
for(i = 0;i < 8;i++){
printf(" %d ",visit[i]);
}
printf("\n");
*/
}
printf("終了\n");
}
//行列を表示する関数
void print_matrix(int a[][N])
{
int i, j;
for(i=0;i<N;i++) {
for(j=0;j<N;j++){
printf("%d ", a[i][j]);}
printf("\n");
}
return;
}