Untitled
unknown
typescript
a year ago
2.8 kB
16
Indexable
type Station = string;
type Line = {
name: string;
stations: Station[];
};
const metroLines: Line[] = [
{ name: "M1", stations: ["Yenikapı", "Aksaray", "Topkapı", "Otogar", "Kocatepe", "Esenler", "Kirazlı"] },
{ name: "M2", stations: ["Yenikapı", "Haliç", "Şişhane", "Taksim", "Osmanbey", "Şişli", "Gayrettepe", "Levent", "4.Levent"] },
{ name: "M3", stations: ["Kirazlı", "Bağcılar", "Mahmutbey", "İstoç", "İkitelli", "Olimpiyat"] },
{ name: "M4", stations: ["Kadıköy", "Ayrılık Çeşmesi", "Acıbadem", "Ünalan", "Göztepe", "Kozyatağı", "Bostancı", "Kartal", "Pendik"] },
{ name: "M5", stations: ["Üsküdar", "Fıstıkağacı", "Bağlarbaşı", "Altunizade", "Ümraniye", "Çekmeköy"] },
// Diğer hatlar ve duraklar eklenebilir
];
function getConnectedStations(station: Station, lines: Line[]): Station[] {
const connectedStations: Station[] = [];
for (const line of lines) {
const index = line.stations.indexOf(station);
if (index !== -1) {
if (index > 0) {
connectedStations.push(line.stations[index - 1]);
}
if (index < line.stations.length - 1) {
connectedStations.push(line.stations[index + 1]);
}
}
}
return connectedStations;
}
function findRoute(start: Station, end: Station, lines: Line[]): { route: Station[], transfers: Station[] } {
let visited: { [key: string]: boolean } = {};
let queue: { station: Station, path: Station[], transfers: Station[] }[] = [{ station: start, path: [start], transfers: [] }];
while (queue.length > 0) {
let { station, path, transfers } = queue.shift()!;
if (station === end && transfers.length <= 3) return { route: path, transfers };
if (!visited[station]) {
visited[station] = true;
let connectedStations = getConnectedStations(station, lines);
for (let connectedStation of connectedStations) {
if (!visited[connectedStation]) {
let newTransfers = [...transfers];
if (path.length > 1 && path[path.length - 2] !== connectedStation) {
newTransfers.push(station);
}
queue.push({ station: connectedStation, path: [...path, connectedStation], transfers: newTransfers });
}
}
}
}
return { route: [], transfers: [] };
}
// Test
const startStation: Station = "4.Levent";
const endStation: Station = "Ünalan";
const result = findRoute(startStation, endStation, metroLines);
console.log(`Route from ${startStation} to ${endStation}:`, result.route);
console.log(`Transfers:`, result.transfers);
Editor is loading...
Leave a Comment