[ad_1]
Xin chào tất cả mọi người ,
Tôi muốn đảm bảo rằng khi một tiểu vùng được kết nối với tiểu vùng khác thông qua
các SubRegions được liên kết và tiểu vùng khác được kết nối với tiểu vùng thứ ba, cả ba đều được nối thành một nhóm duy nhất.
Ví dụ:
“987” được kết nối với “Schwerverkehr”.
“Schwerverkehr” được kết nối với “975”.
Do đó, “975”, “987” và “Schwerverkehr” phải được ghép thành một nhóm.
const region1: Region = { key: 1, name: 'Nahverkehr', subRegions: [ { key: 1, name: '975', linkedSubRegions: [{ key: 25, name: 'Schwerverkehr' }] }, { key: 2, name: '987', linkedSubRegions: [{ key: 25, name: 'Schwerverkehr' }] }, { key: 3, name: 'Aschaffenburg', linkedSubRegions: [] }, { key: 4, name: 'Aschaffenburg-Land', linkedSubRegions: [{ key: 3, name: 'Aschaffenburg' }] }, { key: 5, name: 'Marktheidenfeld', linkedSubRegions: [{ key: 4, name: 'Aschaffenburg-Land' }] }, { key: 25, name: 'Schwerverkehr', linkedSubRegions: [] }, ], };
kết quả phải là:
subRegions: [ { key: 1, name: '975,987,Schwerverkehr'}, { key: 3, name: 'Aschaffenburg,Aschaffenburg-Land,Marktheidenfeld'} ],
Những gì tôi đã thử:
mergeConnectedSubregions(region: Region): SubRegion[] { const subregionsMap: Map<number, SubRegion> = new Map(); const visited: Set<number> = new Set(); // Build a map of subregions for easy access for (const subregion of region.subRegions!) { subregionsMap.set(subregion.key!, subregion); } const mergedSubregions: SubRegion[] = []; const connectedSubregions: SubRegion[] = []; // Perform DFS for each subregion to identify connected subregions for (const subregion of region.subRegions!) { if (!visited.has(subregion.key!)) { dfs(subregion); // Merge the connected subregions const mergedNames = connectedSubregions.map(sub => sub.name).join(','); const mergedSubregion: SubRegion = { key: -1, name: mergedNames }; mergedSubregions.push(mergedSubregion); } } return mergedSubregions; function dfs(subregion: SubRegion) { if (visited.has(subregion.key!)) return; visited.add(subregion.key!); connectedSubregions.push(subregion); for (const model of subregion.linkedSubRegions!) { const connectedSubregion = subregionsMap.get(model.key!); if (connectedSubregion) { dfs(connectedSubregion); } } } } result was : [ { "key": -1, "name": "975,Schwerverkehr", }, { "key": -1, "name": "975,Schwerverkehr,987", }, { "key": -1, "name": "975,Schwerverkehr,987,Aschaffenburg", }, { "key": -1, "name": "975,Schwerverkehr,987,Aschaffenburg,Aschaffenburg-Land", }, { "key": -1, "name": "975,Schwerverkehr,987,Aschaffenburg,Aschaffenburg-Land,Marktheidenfeld" } ]
Giải pháp 2
Nhìn vào Thuật toán thành phần liên thông mạnh của Tarjan[^].
Vấn đề với thuật toán đệ quy là nó có thể gây ra tình trạng tràn ngăn xếp trên các biểu đồ lớn. Một thuật toán lặp cũng tồn tại và không gặp phải vấn đề này.
[ad_2]
コメント