オイラー・一筆書きプログラムについて
Posted: 2014年7月22日(火) 13:06
授業の課題でオイラーの一筆書きのプログラムが出題されたのですが、いまいち理解できません。
特に最初のint a [Node+1][Node+1={...}のところと、下部のvoid visit(int i)の部分がよくわかりません。
どうかよろしくお願いいたします。
特に最初のint a [Node+1][Node+1={...}のところと、下部のvoid visit(int i)の部分がよくわかりません。
どうかよろしくお願いいたします。
#include<stdio.h>
#define Node 4 /*Nodeを4に設定 接点の数*/
#define Root 6 /*Rootを6に設定 辺の数*/
#define Start 1 /*Startを1に設定 一筆書きの図の①から始めるということ*/
int a[Node+1][Node+1]={{0,0,0,0,0},
{0,0,1,0,1},
{0,1,0,1,2},
{0,0,1,0,1},
{0,1,2,1,0}};
int success,
v[Root+1],
n;
void visit(int);
void main(void)
{
success=0; n=Root;
visit(Start);
if(success==0) /*一度も始点に戻ってこれなかった場合*/
printf("解なし\n");
}
void visit(int i)
{
int j;
v[n]=i;
if(n==0 && i==Start){
printf("解 %d:",++success);
for(i=0;i<=Root;i++)
printf("%d",v[i]);
printf("\n");
}
else {
for(j=1;j<=Node;j++)
if(a[i][j]!=0){
a[i][j]--;
a[j][i]--;
n--;
visit(j);
a[i][j]++;
a[j][i]++;
n++;
}
}
}