Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Header.h"
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- void loadfrom(){
- countofver = 0;
- step = 0;
- buf_b = 0;
- buf_e = 0;
- int countrow = 0;
- FILE *file = fopen("graph.txt", "r+");
- if (file == NULL){
- printf("Cannot open this file \n");
- exit(0);
- }
- else{
- //смотрим кол-во строк| кол-во строк = кол-во вершин
- char s[1024];
- fseek(file, 0, SEEK_SET);
- while (!feof(file)){
- fgets(s, 1024, file);
- if (parse_string(s)) {
- if (buf_b + 1 > countofver)
- countofver = buf_b + 1;
- if (buf_e + 1 > countofver)
- countofver = buf_e + 1;
- }
- }
- result = (int*)malloc(countofver* sizeof(int));
- visited = (int*)malloc(countofver * sizeof(int));
- graph = (int **)malloc(countofver * sizeof(int *));
- for (int i = 0; i < countofver; i++)
- graph[i] = (int *)malloc(countofver * sizeof(int));
- fseek(file, 0, SEEK_SET);
- for (int i = 0; i < countofver; i++){
- for (int j = 0; j < countofver; j++){
- graph[i][j] = 0;
- }
- }
- while (!feof(file)){
- fgets(s, 1024, file);
- if (parse_string(s)) {
- graph[buf_b][buf_e] = 1;
- }
- }
- for (int i = 0; i < countofver; i++){
- for (int j = 0; j < countofver; j++){
- printf("%d ", graph[i][j]);
- }
- printf("\n");
- }
- fclose(file);
- }
- }
- void mainalgo(){
- for (int i = 0; i < countofver; i++)
- visited[i] = 0;
- for (int i = 0; i < countofver; i++){
- if (!visited[i]){
- deepfind(i);
- }
- }
- //переворачиваем массив
- for (int i = 0, j = countofver - 1; i < j; i++, j--){
- int tmp = result[i];
- result[i] = result[j];
- result[j] = tmp;
- }
- for (int i = 0; i < countofver; i++)
- printf("%d ", result[i]);
- }
- void deepfind(int ver){
- visited[ver] = 1;
- for (int i = 0; i < countofver; i++){
- if (graph[ver][i] && !visited[i]){
- deepfind(i);
- }
- }
- result[step] = ver;
- step++;
- }
- void saveto(){
- FILE *file = fopen("graphviz.txt", "w+");
- //пересобираем матрицу :
- printf("\n");
- int **buff = (int **)malloc(countofver * sizeof(int *));
- for (int i = 0; i < countofver; i++)
- buff[i] = (int *)malloc(countofver * sizeof(int));
- for (int i = 0; i < countofver; i++){
- for (int j = 0; j < countofver; j++){
- buff[result[i]][j] = graph[i][j];
- graph[i][j] = buff[result[i]][j];
- }
- }
- for (int i = 0; i < countofver; i++){
- for (int j = 0; j < countofver; j++){
- graph[j][result[i]] = buff[j][i];
- }
- }
- fprintf(file, "digraph {\n");
- for (int i = 0; i < countofver; i++){
- for (int j = 0; j < countofver; j++){
- if (graph[i][j])
- fprintf(file, " %d -> %d;\n", i + 1, j + 1);
- }
- }
- fprintf(file, "}");
- free(visited);
- free(graph);
- free(result);
- }
- int parse_string(char *s) {
- int i = 0;
- int j;
- while (s[i] >= '0' && s[i] <= '9')
- ++i;
- if (i == 0 || s[i] == '\0')
- return 0;
- char *buffer = (char*)malloc(i + 1);
- for (j = 0; j < i; j++)
- buffer[j] = s[j];
- buffer[i] = '\0';
- buf_b = atoi(buffer);
- free(buffer);
- while ((s[i] < '0' || s[i] > '9') && s[i] != '\0')
- ++i;
- if (s[i] == '\0')
- return 0;
- int snd_begin = i;
- while (s[i] >= '0' && s[i] <= '9')
- ++i;
- if (s[i] == '\0')
- return 0;
- buffer = (char*)malloc(i - snd_begin + 1);
- for (j = snd_begin; j < i; j++)
- buffer[j - snd_begin] = s[j];
- buffer[i - snd_begin] = '\0';
- buf_e = atoi(buffer);
- free(buffer);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment