using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RewriteMiGong
{
class Program
{
public static void printArray( int[][] m)
{
int v = 0;
for (int j = 0; j<10;j++)
{
for (int i = 0; i < 10; i++)
{
v = m[j][i];
if (v == 0) Console.Write("正");
if (v == 1) Console.Write("■");
if (v == 2) Console.Write("Do");
if (v == 3) Console.Write("33");
}
Console.WriteLine();
}
}
static void Main(string[] args)
{
int[][] map = new int[10][];
map[0] = new int[10] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
map[1] = new int[10] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
map[2] = new int[10] { 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 };
map[3] = new int[10] { 1, 0, 1, 0, 1, 0, 1, 2, 0, 1 };
map[4] = new int[10] { 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 };
map[5] = new int[10] { 1, 0, 0, 0, 0, 0, 0, 1, 0, 1 };
map[6] = new int[10] { 1, 1, 1, 1, 1, 1, 0, 1, 0, 1 };
map[7] = new int[10] { 1, 0, 0, 0, 0, 0, 0, 1, 0, 1 };
map[8] = new int[10] { 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 };
map[9] = new int[10] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
printArray(map);
Console.ReadKey();
int dir = 0;
int step = 0;
int[] d = new int[100];
int xx = 0; int yy = 0;
int x = 0; int y = 8;
do
{
dir++;
if (dir > 4)
{
dir = d[step - 1];
if (dir == 1) x--;
if (dir == 2) y++;
if (dir == 3) x++;
if (dir == 4) y--;
step--;
continue;
}
xx = x; yy = y;
if (dir == 1) xx++;
if (dir == 2) yy--;
if (dir == 3) xx--;
if (dir == 4) yy++;
if (map[yy][xx] == 2)
{
Console.WriteLine("成功");
Console.ReadKey();
}
if (map[yy][xx] != 0)
{
continue;
}
if (map[yy][xx] == 0)
{
d[step] = dir;
map[yy][xx] = 3;
dir = 0;
x = xx;
y = yy;
step++;
printArray(map);
}
} while (true);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RewriteMiGong
{
class Program
{
public static void printArray( int[][] m)
{
int v = 0; //定义一个v 这个v在下文中有v = 0 1 2 3 4几种情况
for (int j = 0; j<10;j++)
{
for (int i = 0; i < 10; i++)
{
v = m[j][i];
if (v == 0) Console.Write("正"); //当数组==0时 输出“正”道路
if (v == 1) Console.Write("■");//墙
if (v == 2) Console.Write("Do");//终点
if (v == 3) Console.Write("33");//路径
}
Console.WriteLine();//此处为当i循环10次后 换一次行
}
}
static void Main(string[] args)
{
int[][] map = new int[10][];//新建一个数列为10的map数组 同时写出10行数列 这样地图长宽是10X10
map[0] = new int[10] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
map[1] = new int[10] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
map[2] = new int[10] { 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 };
map[3] = new int[10] { 1, 0, 1, 0, 1, 0, 1, 2, 0, 1 };
map[4] = new int[10] { 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 };
map[5] = new int[10] { 1, 0, 0, 0, 0, 0, 0, 1, 0, 1 };
map[6] = new int[10] { 1, 1, 1, 1, 1, 1, 0, 1, 0, 1 };
map[7] = new int[10] { 1, 0, 0, 0, 0, 0, 0, 1, 0, 1 };
map[8] = new int[10] { 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 };
map[9] = new int[10] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
printArray(map);//初始化一次map 让map套用printArray方法
Console.ReadKey();//空格继续
int dir = 0;//定义方向 direction
int step = 0;//定义步数
int[] d = new int[100];//定义一个数组用于 记录每一步的方向
int xx = 0; int yy = 0; xx yy是下一步
int x = 0; int y = 8; 坐标(0,8)是开始点 x y是当前步数
//我用的是do循环
do
{
dir++;//dir控制方向 dir与xx yy这种下一步参数有关 当 dir变化的时候 xx 或yy会发生变化
if (dir > 4)//这里是当 dir经历了上下左右时 需后退的情况
{
dir = d[step - 1];
if (dir == 1) x--;//这里要注意是x而不是xx
if (dir == 2) y++;
if (dir == 3) x++;
if (dir == 4) y--;
step--;
continue;
}
xx = x; yy = y;
if (dir == 1) xx++;
if (dir == 2) yy--;
if (dir == 3) xx--;
if (dir == 4) yy++;
if (map[yy][xx] == 2)//找到终点
{
Console.WriteLine("成功");
Console.ReadKey();
}
if (map[yy][xx] != 0)// 遇到的不是道路 即如果碰到墙或者退路
{
//这个时候会循环到dir++ 会改变yy或者xx的值
continue;
}
if (map[yy][xx] == 0)//遇到道路
{
d[step] = dir; //用d【step】记录下每一步方向
map[yy][xx] = 3;//这里给退路的坐标赋值3 这样就可以分辨退路与前进的道路
dir = 0;//方向初始化
x = xx;用x继承 xx的值
y = yy;
step++;
printArray(map);
}
} while (true);
}
}
}