我編碼一個小程序,試圖計算有多少機器人可以在5,10和20秒內逃到一個洞,機器人以10米/秒的速度行進。列表中的對象似乎共享字典鍵和虛值
機器人和孔有兩個浮點數作爲座標,並找出孔和我使用畢達哥拉斯定理機器人之間的距離。
爲了跟蹤哪個機器人最靠近一個孔,我爲每個孔配備了一個以機器人id爲關鍵字的字典以及它們與孔的距離作爲值。
也可以有不同的場景,最大10,不同的數字和洞。
輸入看起來像這樣,其中第一個數字N是場後機器人的數量,後面是N行X/Y座標。其次是數字M,其是M行X/Y座標之後的孔的數量。
輸入一個0
3
0.0 0.0
10.0 0.0
0.0 10.0
3
99.0 0.0
0.0 1000.0
1000.0 1000.0
3
0.0 0.0
100.0 0.0
200.0 0.0
2
95.0 50.0
105.0 50.0
0
結束Theese是我的班
class Robot
{
public int Id { get; private set; }
public double PosX { get; private set; }
public double PosY { get; private set; }
public bool isHiding { get; set; }
public Robot(double posX, double posY, int id)
{
PosX = posX;
PosY = PosY;
Id = id;
}
}
class Hole
{
public Dictionary<int, double> Candidates { get; set; }
public double PosX { get; private set; }
public double PosY { get; private set; }
public bool isOccupied { get; set; }
public Hole(double posX, double posY)
{
PosX = posX;
PosY = posY;
}
}
class Scenario
{
public int Id { get; private set; }
public List<Duration> Durations { get; set; }
public Scenario(int id)
{
Id = id;
}
}
class Duration
{
public int Time { get; private set; }
public int Survivors { get; set; }
public List<Robot> Robots { get; set; }
public List<Hole> Holes { get; set; }
public Duration(int time)
{
Time = time;
}
}
我收集這樣的投入,而這正是我相信的東西可能是問題。雖然對我來說,似乎所有的對象都是正確的。
void CollectInputs()
{
for (int i = 0; i < 10; i++)
{
Scenario scenario = new Scenario(i + 1);
List<Duration> durations = new List<Duration>();
List<Robot> robots = new List<Robot>();
List<Hole> holes = new List<Hole>();
int newRobots = int.Parse(Console.ReadLine());
if (newRobots == 0)
{
break;
}
for (int iii = 0; iii < newRobots; iii++)
{
string[] inputCoordsRobot = Console.ReadLine().Split(' ');
Robot robot = new Robot(double.Parse(inputCoordsRobot[0], CultureInfo.InvariantCulture), double.Parse(inputCoordsRobot[1], CultureInfo.InvariantCulture), iii + 1);
robots.Add(robot);
}
int newHoles = int.Parse(Console.ReadLine());
for (int iii = 0; iii < newHoles; iii++)
{
string[] inputCoordsHole = Console.ReadLine().Split(' ');
Hole hole = new Hole(double.Parse(inputCoordsHole[0], CultureInfo.InvariantCulture), double.Parse(inputCoordsHole[1], CultureInfo.InvariantCulture));
holes.Add(hole);
}
for (int ii = 5; ii <= 20; ii = ii + ii)
{
Duration duration = new Duration(ii);
duration.Robots = new List<Robot>(robots);
duration.Holes = new List<Hole>(holes);
durations.Add(duration);
scenario.Durations = new List<Duration>(durations);
}
_scenarios.Add(scenario);
}
}
這是距離計算。
void UnleashStorm()
{
foreach (var scenario in _scenarios)
{
foreach (var duration in scenario.Durations)
{
double movementCapacity = duration.Time * 10.0f;
foreach (var hole in duration.Holes)
{
Dictionary<int,double> robotsInRange = new Dictionary<int, double>();
foreach (var robot in duration.Robots)
{
double distanceToX = robot.PosX > hole.PosX ? robot.PosX - hole.PosX : hole.PosX - robot.PosX;
double distanceToY = robot.PosY > hole.PosY ? robot.PosY - hole.PosY : hole.PosY - robot.PosY;
double distanceToHole = Math.Sqrt(Math.Pow(distanceToX, 2) + Math.Pow(distanceToY, 2));
if (distanceToHole <= movementCapacity)
{
robotsInRange.Add(robot.Id, distanceToHole);
}
}
hole.Candidates = new Dictionary<int, double>(robotsInRange);
}
}
}
}
我注意到,對於如果事情是添加到特定孔中的每個時間dictoinary鍵和值似乎是在所有期限的計算方法,相同的孔之間共享的調試器。
我認爲這是一個問題,我投擲指針在輸入收集方法或計算距離方法,但我似乎無法找出一個壞的方式。
任何幫助解決這個問題將不勝感激。
這裏唯一的字典是「字典'。大多數字典問題都是人們把複雜類型作爲關鍵詞,並且把它弄得一團糟 - 然而,'int'和'double'知道如何表現,所以:忘記字典本身,這不是問題。如果數據亂七八糟,則必須調試原因,但是:我沒有看到足夠的上下文以供我們取消該問題。 –
感謝您的迅速響應。出現此問題時使用的數據是上面顯示的輸入數據。有什麼我可以添加,以更好地瞭解這個問題? –
'持續時間。洞=新列表(洞);'你創建一個新的列表,並將'洞'的引用添加到新列表中。當你修改洞'hole.Candidates = new Dictionary (robotsInRange);'時,這會導致問題。 –