1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| #include <stdlib.h> #include <stdio.h>
#define N 4
int a[N][N] = {{-1,1,1,-1},{1,-1,-1,1},{1,-1,-1,1},{-1,1,1,-1}}; int label[N] = {0};
struct Stack { int a[4]; int top; };
void addStack(Stack *s, int data) { s->top++; s->a[s->top] = data; }
int delStack(Stack *s) { return s->a[s->top--]; }
int getTop(Stack *s) { return s->a[s->top]; }
void dfs(int start) { Stack *s = (Stack *)malloc(sizeof(Stack)); s->top = -1; printf("%d ", start); label[start] = 1; addStack(s, start); while(s->top != -1) { int tmp = getTop(s); int i; for(i=0; i<4; i++) { if(a[tmp][i] == 1 && label[i] == 0) { printf("%d ", i); label[i] = 1; addStack(s, i); break; } } if(i == 4) delStack(s); } free(s); }
int main() { dfs(0); return 0; }
|