-
Notifications
You must be signed in to change notification settings - Fork 7
/
Program.cs
95 lines (94 loc) · 3.15 KB
/
Program.cs
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//创建二位数组board记录queen的位置,遍历queens,将每个queen的坐标在board中标记为1。
//从King坐标出发向八个方向遍历,找到在每个方向上最近的queen的坐标,将其记录入res。
using System;
using System.Collections.Generic;
namespace QueensThatCanAttackTheKing
{
class Program
{
static void Main(string[] args)
{
int[][] queens = new int[6][];
queens[0] = new int[2] { 0, 1 };
queens[1] = new int[2] { 1, 0 };
queens[2] = new int[2] { 4, 0 };
queens[3] = new int[2] { 0, 4 };
queens[4] = new int[2] { 3, 3 };
queens[5] = new int[2] { 2, 4 };
int[] king = { 0, 0 };
Console.WriteLine(QueensAttacktheKing(queens, king));
}
static IList<IList<int>> QueensAttacktheKing(int[][] queens, int[] king)
{
var res = new List<IList<int>>();
int[,] board = new int[8, 8];
foreach (var q in queens)
board[q[0], q[1]] = 1;
for (int i = king[0] + 1; i < 8; i++)
{
if(board[i, king[1]] == 1)
{
res.Add(new int[2] { i, king[1] });
break;
}
}
for (int i = king[0] - 1; i >= 0; i--)
{
if (board[i, king[1]] == 1)
{
res.Add(new int[2] { i, king[1] });
break;
}
}
for (int i = king[1] + 1; i < 8; i++)
{
if(board[king[0], i] == 1)
{
res.Add(new int[2] { king[0], i });
break;
}
}
for (int i = king[1] - 1; i >= 0; i--)
{
if (board[king[0], i] == 1)
{
res.Add(new int[2] { king[0], i });
break;
}
}
for (int i = 1; king[0] + i < 8 && king[1] + i < 8; i++)
{
if(board[king[0] + i,king[1] + i] == 1)
{
res.Add(new int[2] { king[0] + i, king[1] + i });
break;
}
}
for (int i = 1; king[0] - i >= 0 && king[1] - i >= 0; i++)
{
if (board[king[0] - i, king[1] - i] == 1)
{
res.Add(new int[2] { king[0] - i, king[1] - i });
break;
}
}
for (int i = 1; king[0] - i >= 0 && king[1] + i < 8; i++)
{
if(board[king[0] - i, king[1] + i] == 1)
{
res.Add(new int[2] { king[0] - i, king[1] + i });
break;
}
}
for (int i = 1; king[0] + i < 8 && king[1] - i >=0; i++)
{
if(board[king[0] + i, king[1] - i] == 1)
{
res.Add(new int[2] { king[0] + i, king[1] - i });
break;
}
}
return res;
}
}
}