オイラーの一筆書きについて
Posted: 2014年7月18日(金) 10:36
件名の通りです。
オイラーの一筆書きに関してですが、テキスト通りにやって実行結果を得ることができたのですが、いまいち理解ができません。
特に最初の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);
printf("\n");
}
else {
for(j=1;j<=Node;j++)
if(a[j]!=0){
a[j]--;
a[j]--;
n--;
visit(j);
a[j]++;
a[j]++;
n++;
}
}
}
オイラーの一筆書きに関してですが、テキスト通りにやって実行結果を得ることができたのですが、いまいち理解ができません。
特に最初の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);
printf("\n");
}
else {
for(j=1;j<=Node;j++)
if(a[j]!=0){
a[j]--;
a[j]--;
n--;
visit(j);
a[j]++;
a[j]++;
n++;
}
}
}