0% found this document useful (0 votes)
2 views

Graph Coloring Code

The document contains a Java program for a Convention Room Assignment system that allows users to input events with specific start and end times. It checks for overlapping events and assigns them to different rooms accordingly, displaying the total number of rooms required. The program utilizes a class structure to represent events and manages room assignments through sorting and comparison of event times.

Uploaded by

ueuauk4ever
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

Graph Coloring Code

The document contains a Java program for a Convention Room Assignment system that allows users to input events with specific start and end times. It checks for overlapping events and assigns them to different rooms accordingly, displaying the total number of rooms required. The program utilizes a class structure to represent events and manages room assignments through sorting and comparison of event times.

Uploaded by

ueuauk4ever
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

package mathsEl;

import java.util.*;

public class DynamicRoomAssignment {


static class Event {
String subject;
int startHour, startMinute;
int endHour, endMinute;
boolean isPmStart, isPmEnd;

Event(String subject, int startHour, int startMinute, boolean isPmStart,


int endHour, int endMinute, boolean isPmEnd) {
this.subject = subject;
this.startHour = startHour;
this.startMinute = startMinute;
this.isPmStart = isPmStart;
this.endHour = endHour;
this.endMinute = endMinute;
this.isPmEnd = isPmEnd;
}

// Convert time to minutes since midnight for comparison


int getStartTimeInMinutes() {
int hour = startHour;
if (isPmStart && hour != 12) hour += 12;
if (!isPmStart && hour == 12) hour = 0;
return hour * 60 + startMinute;
}

int getEndTimeInMinutes() {
int hour = endHour;
if (isPmEnd && hour != 12) hour += 12;
if (!isPmEnd && hour == 12) hour = 0;
return hour * 60 + endMinute;
}

boolean overlaps(Event other) {


return getStartTimeInMinutes() < other.getEndTimeInMinutes() &&
other.getStartTimeInMinutes() < getEndTimeInMinutes();
}

@Override
public String toString() {
return String.format("%s (%d:%02d%s - %d:%02d%s)",
subject,
startHour == 0 ? 12 : startHour > 12 ? startHour - 12 :
startHour,
startMinute,
isPmStart ? "pm" : "am",
endHour == 0 ? 12 : endHour > 12 ? endHour - 12 : endHour,
endMinute,
isPmEnd ? "pm" : "am");
}
}

public static void main(String[] args) {


Scanner scanner = new Scanner(System.in);
List<Event> events = new ArrayList<>();
System.out.println("Convention Room Assignment Program");
System.out.println("=================================");

// Get number of events


System.out.print("Enter the number of events: ");
int numEvents = scanner.nextInt();
scanner.nextLine(); // Consume newline

// Input for each event


for (int i = 0; i < numEvents; i++) {
System.out.println("\nEvent #" + (i+1));
System.out.print("Subject/Title: ");
String subject = scanner.nextLine();

System.out.print("Start time (e.g., 3:30pm) - Hour: ");


int startHour = scanner.nextInt();
System.out.print("Start time - Minute: ");
int startMinute = scanner.nextInt();
scanner.nextLine(); // Consume newline
System.out.print("Start time - AM or PM: ");
boolean isPmStart = scanner.nextLine().trim().equalsIgnoreCase("PM");

System.out.print("End time - Hour: ");


int endHour = scanner.nextInt();
System.out.print("End time - Minute: ");
int endMinute = scanner.nextInt();
scanner.nextLine(); // Consume newline
System.out.print("End time - AM or PM: ");
boolean isPmEnd = scanner.nextLine().trim().equalsIgnoreCase("PM");

events.add(new Event(subject, startHour, startMinute, isPmStart,


endHour, endMinute, isPmEnd));
}

// Display all events


System.out.println("\nAll Events:");
for (int i = 0; i < events.size(); i++) {
System.out.println((i+1) + ". " + events.get(i));
}

// Assign rooms
Map<Integer, List<Event>> roomAssignments = assignRooms(events);

// Display room assignments


System.out.println("\nRoom Assignments:");
for (int roomNum : roomAssignments.keySet()) {
System.out.println("Room " + roomNum + ":");
List<Event> roomEvents = roomAssignments.get(roomNum);
for (Event event : roomEvents) {
System.out.println(" - " + event);
}
}

System.out.println("\nTotal number of rooms required: " +


roomAssignments.size());

scanner.close();
}
public static Map<Integer, List<Event>> assignRooms(List<Event> events) {
// Sort events by start time for more efficient room assignment
List<Event> sortedEvents = new ArrayList<>(events);
sortedEvents.sort(Comparator.comparing(Event::getStartTimeInMinutes));

Map<Integer, List<Event>> roomAssignments = new HashMap<>();

for (Event event : sortedEvents) {


boolean assigned = false;

// Try to assign to an existing room


for (int roomNum = 1; roomNum <= roomAssignments.size(); roomNum++) {
List<Event> roomEvents = roomAssignments.get(roomNum);
boolean canAssign = true;

for (Event existingEvent : roomEvents) {


if (event.overlaps(existingEvent)) {
canAssign = false;
break;
}
}

if (canAssign) {
roomEvents.add(event);
assigned = true;
break;
}
}

// If couldn't assign to existing room, create a new room


if (!assigned) {
List<Event> newRoom = new ArrayList<>();
newRoom.add(event);
roomAssignments.put(roomAssignments.size() + 1, newRoom);
}
}

return roomAssignments;
}
}

You might also like