Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- //struct Edge {
- // int first;
- // int second;
- //};
- void dfs(size_t** graph, size_t vertex, size_t* colors, size_t color, size_t vertices_count);
- int main() {
- FILE* file = fopen("input", "r");
- size_t N;
- fscanf(file, "%lu", &N);
- size_t** graph = (size_t**)calloc(N + 1, sizeof(size_t*));
- for (size_t i = 0; i < N + 1; ++i) {
- graph[i] = (size_t*)calloc(N + 1, sizeof(size_t));
- }
- size_t left, right;
- while(fscanf(file, "%lu %lu", &left, &right) != EOF) {
- graph[left][right] = 1;
- graph[right][left] = 1;
- }
- size_t* colors = (size_t*)calloc(N + 1, sizeof(size_t));
- size_t color = 1;
- for (size_t i = 0; i < N + 1; ++i) {
- if (colors[i] == 0) {
- colors[i] = color;
- dfs(graph, i, colors, color, N + 1);
- ++color;
- }
- }
- for (size_t i = 1; i < color; ++i) {
- for (size_t j = 0; j < N + 1; ++j) {
- if (colors[j] == i) {
- std::cout << j << ' ';
- fflush(stdin);
- }
- }
- std::cout << std::endl;
- }
- return 0;
- }
- void dfs(size_t** graph, size_t vertex, size_t* colors, size_t color, size_t vertices_count) {
- for (size_t i = 0; i < vertices_count; ++i) {
- if (graph[vertex][i]) {
- if (colors[i] == 0) {
- colors[i] = color;
- dfs(graph, i, colors, color, vertices_count);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement