简单C程序,迷宫

 1 #include<stdio.h>
 2 #include <stdlib.h> 
 3 int visit(int, int);
 4 int maze[11][10] =
 5 {
 6     {1, 1, 1, 1, 1, 1, 1, 1, 1 ,1},
 7     {1, 0, 0, 1, 0, 0, 0, 1, 0 ,1},
 8     {1, 0, 0, 1, 0, 0, 0, 1, 0 ,1},
 9     {1, 0, 0, 0, 0, 1, 1, 0, 1 ,1},
10     {1, 0, 1, 1, 1, 0, 0, 1, 0 ,1},
11     {1, 0, 0, 0, 1, 0, 0, 0, 0 ,1},
12     {1, 0, 1, 0, 0, 0, 1, 0, 1 ,1},
13     {1, 0, 1, 1, 1, 1, 0, 0, 1 ,1},
14     {1, 1, 1, 0, 0, 0, 1, 0, 1 ,1},
15     {1, 1, 1, 0, 0, 0, 0, 0, 0, 1},
16     {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
17 };
18 int startI = 1, startJ = 1; // 入口
19 int endI = 9, endJ = 8; // 出口
20 int success = 0;
21 
22 int main(void) {
23     int i, j;
24 
25     printf("显示迷宫:
");
26     for (i = 0; i < 9; i++) {
27         for (j = 0; j < 8; j++)
28             if (maze[i][j] == 1)
29                 printf("");
30             else
31                 printf("  ");
32         printf("
");
33     }
34 
35     if (visit(startI, startJ) == 0)
36         printf("
沒有找到出口!
");
37     else {
38         printf("
显示路径:
");
39         for (i = 0; i < 9; i++) {
40             for (j = 0; j < 8; j++) {
41                 if (maze[i][j] == 1)
42                     printf("");
43                 else if (maze[i][j] == 2)
44                     printf("");
45                 else
46                     printf("  ");
47             }
48             printf("
");
49         }
50     }
51 
52     return 0;
53 }
54 
55 int visit(int i, int j) {
56     maze[i][j] = 2;
57 
58     if (i == endI && j == endJ)
59         success = 2;
60 
61     if (success != 2 && maze[i][j + 1] == 0) visit(i, j + 1);
62     if (success != 2 && maze[i + 1][j] == 0) visit(i + 1, j);
63     if (success != 2 && maze[i][j - 1] == 0) visit(i, j - 1);
64     if (success != 2 && maze[i - 1][j] == 0) visit(i - 1, j);
65 
66     if (success != 2)
67         maze[i][j] = 0;
68 
69     return success;
70 }
  1 //参考.c
  2 #include<iostream>
  3 
  4 using namespace std;
  5 void strMatrix(int *a1, int **a2, int n);
  6 void output(int **a2, int n);
  7 int main()
  8 {
  9     int n, i, c, d;
 10     cout << "How many numbers do you want to input:" << endl;
 11     cin >> n;
 12     int *arr1 = new int[n];
 13     int **arr2 = new int*[n];
 14     for (i = 0; i < n; i++)
 15         arr2[i] = new int[n];
 16     cout << "Please input the numbers:" << endl;
 17     for (i = 0; i < n; i++)
 18         cin >> arr1[i];
 19     cout << "Please input the ralations:" << endl;
 20     cin >> c;
 21     cin >> d;
 22     strMatrix(arr1, arr2, n);
 23     output(arr2, n);
 24 }
 25 void strMatrix(int *a1, int **a2, int n)
 26 {
 27     for (int i = 0; i < n; i++)
 28         for (int j = 0; j < n; j++)
 29         {
 30             if (a1[i] % a1[j] == 0)
 31                 a2[i][j] = 1;
 32             else
 33                 a2[i][j] = 0;
 34         }
 35 }
 36 void output(int **a2, int n)
 37 {
 38     for (int i = 0; i < n; i++)
 39     {
 40         for (int j = 0; j < n; j++)
 41             cout << a2[i][j] << " ";
 42         cout << endl;
 43     }
 44 }
 45 
 46 void zfx(int a[M][M], int n)
 47 {
 48     int i = 0, vale1 = 1, vale2 = 1;/*vale1确定关系的自反性,vale2
 49                                     判断关系的反自反性*/
 50     while (i < n)
 51     {
 52         if (a[i][i] == 1) vale2 = 0;
 53         else vale1 = 0;
 54         i++;
 55     }
 56     if (vale1 == 1) printf("zfx
");
 57     if (vale2 == 1) printf("fzfx
");
 58     if (!(vale1) && !(vale2)) printf("wzfxywfzfx
");
 59 }
 60 void dcx(int a[M][M], int n)
 61 {
 62     int i, j, vale3 = 1, vale4 = 1;/*vale3确定关系的对称性,vale4
 63                                    判断关系的反对称性*/
 64     for (i = 0; i < n; i++)
 65         for (j = 0; j < i; j++)
 66             if (a[i][j] == a[j][i])
 67                 vale4 = 0;
 68             else vale3 = 0;
 69             if (vale3 == 1) printf("dcx
");
 70             if (vale4 == 1) printf("fdcx
");
 71             if (!(vale3) && !(vale4)) printf("wdcx wfdcx
");
 72 } void cdx1(int a[M][M], int n)/*用MM ⊆2 算法来判断传递 性*/
 73 {
 74     int b[M][M], i, j, k, vale = 1;
 75     for (i = 0; i < n; i++)
 76         for (j = 0; j < n; j++)
 77         {
 78             b[i][j] = 0;
 79             for (k = 0; k < n; k++)
 80                 b[i][j] += a[i][k] * a[k][j];/*计算 2M */
 81         }
 82         for (i = 0; i < n; i++)
 83             for (j = 0; j < n; j++)
 84                 if (b[i][j] != 0)
 85                     b[i][j] = 1;
 86         for (i = 0; i < n; i++)
 87             for (j = 0; j < n; j++)
 88                 if (b[i][j] == 1)
 89                     if (a[i][j] != b[i][j])
 90                         vale = 0;
 91         if (vale)
 92             printf("ycdx
");
 93         else   
 94             printf("wcdx
");
 95 }
 96 void cdx2(int a[M][M], int n)/*用warshall算法来求传递闭
 97                              包数组b */
 98 {
 99     int b[M][M], i, j, k, vale = 1;
100     for (i = 0; i < n; i++)
101         for (j = 0; j < n; j++)
102             b{ [i][j] = a[i][j];
103     for (k = 0; k < n; k++)
104         i{ (f a[i][j] && (a[i][k] || a[j][k]))
105         b[i][k] = 1;
106     }
107     }
108     for (i = 0; i < n; i++)     /* 判断数组a和b相等 */
109         for (j = 0; j < n; j++)
110             (iaf[i][j] != b[i][j])
111         {
112             vale = 0; break;
113         }
114         if (vale == 1) printf("cdx
");
115         else printf("wcdx
");
116 }
原文地址:https://www.cnblogs.com/Zblogs/p/3391250.html