6.3w+
社区成员
#include <iostream.h>
#include <windows.h>
#include <math.h>
const n = 4, m = 5;
int entr(int y[n][m], int z) ///////////////////////找第1行是否有0元素
{
int entrance_y;
while (z < m)
{
if (y[1][z] == 0)
{
entrance_y = z;
return entrance_y;
}
else return 0;
}
}
void main()
{
int y[4][5] = {{4, 4, 4, 4, 4}, {4, 0, 0, 2, 4}, {4, 2, 2, 2, 4}, {4, 2, 2, 2, 4}};
for (int i = 0;i < n;i++)
{
for (int j = 0;j < m;j++)
cout < < y[i][j] < < " "; ////////////////////////////////////////加了这个循环后就不行了,删掉的话,整个程序执行成功????????????????
cout < < endl;
}
for (int j = 1;j < m;j++)
{
int entrance_x = 1;
int a = entrance_x;
int b = entr(y, j);
if (b == 0)
continue;
int c = b;
//cout < <"The entrance is :" < <"(" < <a < <"," < <b < <")" < <c < <endl;
while (a < n) //在点(i,j)上探索,不达最后一行时,反复搜索。
{
//处理死点。
if (y[a - 1][b] >= 2 && y[a][b + 1] >= 2 && y[a + 1][b] >= 2 && a > 1 && b > 1)
{
y[a][b] = 3;b--;
}
if (y[a][b - 1] == 4 && y[a][b + 1] == 2 && y[a + 1][b] == 2 && y[a - 1][b] == 4) //左顶角
{
y[a][b] = 3;
}
else if (y[a][b + 1] >= 2 && y[a + 1][b] >= 2 && y[a][b - 1] >= 0)
{
y[a][b] = 3;a--;
}
else if (y[a + 1][b] >= 2 && y[a][b - 1] >= 2 && y[a - 1][b] >= 2 && a > 1 && b > 1)
{
y[a][b] = 3;b++;
}
else y[a][b] = 1;
//按逆时针先走没走过的点
if (y[a + 1][b] == 0) a++;
else if (y[a][b + 1] == 0) b++;
else if (y[a - 1][b] == 0) a--;
else if (y[a][b - 1] == 0) b--;
//按顺时针走走过的点
else if (y[a - 1][b] == 1) a--;
else if (y[a][b + 1] == 1) b++;
else if (y[a + 1][b] == 1) a++;
else if (y[a][b - 1] == 1) b--;
//如果不通,则跳出该循环
if (y[entrance_x][c] == 3)
break;
for (int j = 1;j < m;j++)
{
if (y[n - 1][j] == 1)
a = m;
}
}
}
for (j = 1;j < 5;j++)
{
if (y[n - 1][j] != 1)
cout < < "The probability p is small." < < endl;
else
cout < < "p reaches the critical probability pc." < < endl;
}
for (int k = 0;k < n;k++)
{
for (j = 0;j < m;j++)
cout < < y[k][j] < < " ";
cout < < endl;
}
}