public bool pickProducts(Warehouse warehouse, Client client) { capacityLeft = maxCapacity; item.Clear(); int turnsWarehouse = (int)Math.Ceiling(Math.Sqrt((x - warehouse.x) * (x - warehouse.x) + (y - warehouse.y) * (y - warehouse.y))); int turnsClient = (int)Math.Ceiling(Math.Sqrt((x - client.x) * (x - client.x) + (y - client.y) * (y - client.y))); int totalTurns = 2 + turnsWarehouse + turnsClient; if (totalTurns > turnsLeft) return false; turnsLeft -= totalTurns; for (int i = 0; i < client.orderCount; i++) { if (warehouse.productAvailability[client.orderType[i]] > 0 && capacityLeft >= Program.productWeight[client.orderType[i]]) { warehouse.productAvailability[client.orderType[i]]--; capacityLeft -= Program.productWeight[client.orderType[i]]; item.Add(client.orderType[i]); } } if (item.Count == 0) return false; for (int i = 0; i < item.Count; i++) { using (TextWriter writer = new StreamWriter(Program.outputPath, true)) { writer.Write(myIndex + " L " + warehouse.myIndex + " " + item[i] + " " + 1 + Environment.NewLine); writer.Flush(); } //File.AppendAllText(Program.outputPath, myIndex + " L " + warehouse.myIndex + " " + item[i] + " " + 1 + Environment.NewLine); for (int j = 0; j < client.orderCount; j++) { if (item[i] == client.orderType[j]) { client.orderType.RemoveAt(j); break; } } } client.orderCount -= item.Count; for (int i = 0; i < item.Count; i++) { //File.AppendAllText(Program.outputPath, myIndex + " D " + client.myIndex + " " + item[i] + " " + 1 + Environment.NewLine); using (TextWriter writer = new StreamWriter(Program.outputPath,true)) { writer.Write(myIndex + " D " + client.myIndex + " " + item[i] + " " + 1 + Environment.NewLine); writer.Flush(); } } return true; }
public static void readInput(string path) { using (TextReader reader = File.OpenText(path)) { string line = reader.ReadLine(); string[] bits = line.Split(' '); rows = int.Parse(bits[0]); columns = int.Parse(bits[1]); droneCount = int.Parse(bits[2]); totalTurns = int.Parse(bits[3]); droneMaxCapacity = int.Parse(bits[4]); drone = new Drone[droneCount]; droneChecked = new int[droneCount]; line = reader.ReadLine(); productCount = int.Parse(line); productWeight = new int[productCount]; line = reader.ReadLine(); bits = line.Split(' '); for (int i = 0; i < productCount; i++) { productWeight[i] = int.Parse(bits[i]); } line = reader.ReadLine(); warehouseCount = int.Parse(line); warehouse = new Warehouse[warehouseCount]; for (int i = 0 ; i < warehouseCount; i++) { line = reader.ReadLine(); bits = line.Split(' '); warehouse[i] = new Warehouse(int.Parse(bits[0]), int.Parse(bits[1]),i); line = reader.ReadLine(); bits = line.Split(' '); for (int j = 0; j < productCount; j++) { warehouse[i].productAvailability.Add(int.Parse(bits[j])); } } Drone.maxCapacity = droneMaxCapacity; for (int i = 0; i < droneCount; i++) { drone[i] = new Drone(totalTurns); drone[i].myIndex = i; } line = reader.ReadLine(); clientCount = int.Parse(line); client = new List<Client>(); clientChecked = new int[clientCount]; for (int i = 0; i < clientCount; i++) { line = reader.ReadLine(); bits = line.Split(' '); int x = int.Parse(bits[0]); int y = int.Parse(bits[1]); line = reader.ReadLine(); int orderCount = int.Parse(line); client.Add( new Client(x, y, orderCount, productCount, i)); line = reader.ReadLine(); bits = line.Split(' '); for (int j = 0; j < orderCount; j++) { int order = int.Parse(bits[j]); client[i].orderType.Add(order); client[i].product[order] = true; } } } return; }