Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "all.h"
- void doall(){
- int start, size = 7;
- int **array = (int **)malloc(size*sizeof(int*));
- for (int i = 0; i<size; i++)
- array[i] = (int*)malloc(size*sizeof(int));
- char patch[20];
- FILE *fp;
- fp = fopen("graph.txt", "r+");
- if (fp != NULL)
- {
- for (int i = 0; i<size; i++)
- {
- for (int j = 0; j<size; j++)
- fscanf(fp, "%d ", &array[i][j]);
- }
- fclose(fp);
- for (int start = 0; start<size; start++)
- doit(array, start, size);
- free(array);
- system("pause");
- }
- else
- {
- printf("Невозможно открыть файл %s, пожалуйста укажите правильное имя файла\n", patch);
- free(array);
- exit(0);
- }
- }
- void doit(int **GR, int st, int size)
- {
- int count, index, i, u, m = st + 1;
- int*distance = (int *)malloc(size*sizeof(int));
- bool*visited = (bool *)malloc(size*sizeof(bool));
- int*check = (int *)malloc(size*sizeof(int));
- for (i = 0; i<size; i++)
- {
- distance[i] = INT_MAX; visited[i] = false; check[i] = INT_MAX;
- }
- distance[st] = 0;
- for (count = 0; count<size - 1; count++)
- {
- int min = INT_MAX;
- for (i = 0; i<size; i++)
- if (!visited[i] && distance[i] <= min)
- {
- min = distance[i]; index = i;
- }
- u = index;
- visited[u] = true;
- for (i = 0; i<size; i++)
- if (!visited[i] && GR[u][i] && distance[u] != INT_MAX && distance[u] + GR[u][i]<distance[i])
- {
- if (GR[u][i] <= -1)
- {
- check[i] = 0;
- }
- else if (GR[u][i]>0)
- check[i] = 1;
- distance[i] = distance[u] + GR[u][i];
- }
- }
- printf("Стоимость пути из заданой вершины до остальных:\t\n");
- for (i = 0; i<size; i++)
- {
- if (distance[i] != INT_MAX)
- {
- if (check[i] == 0)
- {
- printf("%d -> %d = %d\t Маршрут имеет отрицательную стоимость!\n", m, i + 1, distance[i]);
- }
- else if (check[i] == 1)
- {
- printf("%d -> %d = %d\n", m, i + 1, distance[i]);
- }
- }
- else
- printf("%d -> %d = Маршрут недоступен\n", m, i + 1);
- }
- free(distance);
- free(visited);
- free(check);
- }
Add Comment
Please, Sign In to add comment