C# 世界名画陈列算法
来源:互联网 发布:大数据的现状与展望 编辑:程序博客网 时间:2024/04/29 21:51
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _5
{
class Manchine
{
public int[,] Mach(int n,int m)
{
//队列中0 表示没有机器人看守 1表示有 7 表示机器人位置 -1 表示死路
int[,] hou=new int[n,m];
int index = 0;
int index2 = 0;
//int Minbj = 0; //判断是否为边角
//int Maxbj = 0; //判断是否为边角
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
hou[i,j] = 0;
}
}
hou[0, 1] = 7;
hou[0, 0] = 1;
hou[0, 2] = 1;
hou[1, 1] = 1;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (hou[i, j] == 0)
{
if (Check(hou, i, j, n, m) == true)
{
hou[i, j] = 7;
hou=MCheck(hou, i, j, n, m);
Console.WriteLine("成功 第 " + index++ + " 种");
}
}
}
}
return hou;
}
public int[,] Banjiao(int[,] h, int x, int y, int n, int m)
{
if (x == 0 && (y > 0 && (y<=m-1)))
{
h[x + 1, y] = 1;
if (y < m - 1) h[x, y+1] = 1;
}
else if (x == n - 1 && (y >= 0 && (y <= m - 1)))
{
if (h[x - 1, y]!=7) h[x - 1, y] = 1;
if(y==m-1) h[x , y-1] = 1;
if (h[x, y] == 7)
{
if (y>0 && y <= m - 1)
{
if (x == n - 1 && y == m - 1)
{
}
else
{
h[x, y - 1] = 1;
h[x, y + 1] = 1;
}
}
}
}
else if (y == 0 && (x > 0 && (x <= n - 1)))
{
h[x, y+1] = 1;
if (x > 0) h[x-1, y] = 1;
if (x <= n-1) h[x +1, y] = 1;
}
else if (y == n - 1 && (x >= 0 && (x <= n - 1)))
{
h[x, y-1] = 1;
if(x==n-1) h[x - 1, y] = 1;
if (h[x, y] == 7)
{
if (x > 0 && y <= m - 1)
{
h[x - 1, y] = 1;
}
}
}
return h;
}
public int[,] MCheck(int[,] h,int x,int y,int n,int m)
{
if(h[x, y] == 7)
{
if ((x > 0 && x < (n - 1)) && (y > 0 && y < (m - 1)))
{
h[x, y - 1] = 1;
h[x, y + 1] = 1;
h[x - 1, y] = 1;
h[x + 1, y] = 1;
}
else if (x == 0 || y == 0 || x == n - 1 || y == m - 1)
{
h=Banjiao(h, x ,y ,n, m);
}
}
return h;
}
public bool Banjiao2(int[,] h, int x, int y, int n, int m)
{
if (x == 0 && (y > 0 && (y <= m - 1)))
{
if (h[x + 1, y] == 1 && h[x, y - 1] == 1)
return false;
else
return true;
}
else if (x == n - 1 && (y >= 0 && (y <= m - 1)))
{
if (h[x - 1, y] == 1)
{
if (x > 0 && y>0)
{
if (y == m - 1)
{
if(h[x - 1, y] == 1 && h[x, y - 1] == 1)
{
return true;
}
}
else
{
if (h[x - 1, y] == 1 && h[x, y - 1] == 1 && h[x, y + 1] == 1)
{
return true;
}
}
}
return false;
}
else if (y == m - 1 && h[x, y - 1] == 1)
return false;
else
return true;
}
else if (y == 0 && (x > 0 && (x <= n - 1)))
{
if (h[x, y + 1] == 1 && h[x-1, y] == 1)
return false;
else
return true;
}
else if (y == n - 1 && (x >= 0 && (x <= n - 1)))
{
if (h[x, y - 1] == 1)
{
if (x > 0 && y > 0)
{
if (y == m - 1)
{
if (h[x - 1, y] == 0 && h[x, y - 1] == 1)
{
return true;
}
}
}
return false;
}
else if (x == n - 1 && h[x - 1, y] == 1)
return false;
else
return true;
}
return true;
}
public bool Check(int[,] h,int x,int y,int n,int m)
{
if ((x > 0 && x < (n - 1)) && (y > 0 && y < (m - 1)))
{
if (h[x, y - 1] == 0 || h[x, y + 1] == 0 || h[x, y + 1] == 0 || h[x, y + 1] == 0)
return true;
else
return false;
}
else if (x == 0 || y == 0 || x == n - 1 || y == m - 1)
{
return Banjiao2(h, x, y, n, m);
}
return true;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("输入 0 退出");
int c = 0;
c = Convert.ToInt32(Console.ReadLine());
while (true)
{
if (c == 0) break;
int n, m;
Console.WriteLine("请输入行数:N>=3");
n = Convert.ToInt32(Console.ReadLine());
while (true)
{
if (n >= 3) break;
Console.WriteLine("请重新输入行数:N>=3");
n = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("请输入列数:M>=3");
m = Convert.ToInt32(Console.ReadLine());
while (true)
{
if (m >= 3) break;
Console.WriteLine("请重新输入行数列数:M>=3");
m = Convert.ToInt32(Console.ReadLine());
}
int[,] fangjian = new int[n, m];
Manchine mc = new Manchine();
fangjian = mc.Mach(n, m);
int num = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (fangjian[i, j] == 7) num++;
Console.Write(fangjian[i, j] + " ");
}
Console.WriteLine();
}
Console.WriteLine("机器人数量为 " + num + " 个");
Console.WriteLine("输入 0 退出");
c = Convert.ToInt32(Console.ReadLine());
}
}
}
}
- C# 世界名画陈列算法
- 世界名画
- 算法篇-10-回溯法-工作分配&世界名画监视
- 世界名画陈列馆问题
- 世界名画陈列馆问题
- 通过python的深度学习算法包去训练计算机模仿世界名画的风格
- 一句话教你认出世界名画作者!
- 名画
- 世界名画陈列馆问题(不重复监视)
- 你一生要知道的74幅世界名画…
- 世界名画陈列馆问题-重复&不重复两种
- 世界名画陈列馆问题(分支限界法)
- 陈列知识
- 陈列设计师
- 人工智能学习梵高,毕加索风格,画出的世界名画是什么样子
- 陈列专家-堆头陈列
- 名画网站
- 店铺服装陈列与网站服装陈列
- Hao to makefile
- ajax PDF
- CSDN博客首页改版,新版与老版的截屏对比
- 深入系统底层--之--教你用0101写程序
- C# 排列组合
- C# 世界名画陈列算法
- c# 九格填数游戏
- c# 最小重量机器设计
- c# 硬币算法
- c# 设n个人围坐在一个圆桌周围
- 嵌入式Linux开发综述
- GTD的基本理念、方法与网络资源
- progeCAD 2009专业版
- Apache Mina使用手记(四)