数据结构作业
第三次:第一题
第三次:第二题
第三次:第二题:"matrix.txt"
第三次:第三题
第三次:第三题:“matrix2.txt”
第四次:题目说明
数据结构第七章章节测试
第四次:第一题
第四次:第二题:shell_sort
第四次:第二题:quick_sort
第四次:第二题:merge_sort
本文档使用 MrDoc 发布
-
+
首页
第三次:第二题
>几点说明: >- txt文件见`matrix.txt`文件 >- 本题直接采用了上一题中输入边数的建议,具体变化见`matrix.txt`文件,而且由于老师给的题中是无向图,所以直接xy和yx赋值。 ```c #include <stdio.h> #include <malloc.h> #include <stdlib.h> int main(){ int ** matrix; // read the file and get the matrix FILE * fp = fopen("matrix.txt", "r"); if(fp == NULL){ printf("Open file error !\n"); return 0; } int size, edges; int x, y, value; int i, j; fscanf(fp, "%d %d", &size, &edges); // printf("%d, %d\n", size, edges); matrix = (int **)malloc(sizeof(int *) * size); for(i = 0; i < size; i++){ matrix[i] = (int *)malloc(sizeof(int) * size); for(j = 0; j < size; j++){ matrix[i][j] = 0; } } for(i = 0; i <= edges; i++){ fscanf(fp, "%d %d %d", &x, &y, &value); matrix[x][y] = value; matrix[y][x] = value; } fclose(fp); // show the matrix for(i = 0; i < size; i++){ for(j = 0; j < size; j++){ printf("%d ", matrix[i][j]); } printf("\n"); } // deal with it by djikstra int * dis = (int *)malloc(sizeof(int) * size); int * flag = (int *)malloc(sizeof(int) * size); dis[0] = 0; flag[0] = 1; for(i = 1; i < size; i++){ if(matrix[0][i] != 0){ dis[i] = matrix[0][i]; flag[i] = -1; } else{ dis[i] = 9999; // means infinity flag[i] = 0; } } int min, min_num; min = 9999; while(1){ // get min for(i = 0; i < size; i++){ if(flag[i] == -1){ if(dis[i] < min){ min = dis[i]; min_num = i; } } } flag[min_num] = 1; // if finished for(i = 0; i < size; i++){ if(flag[i] != 1){ break; } } if(i == size){ break; } // reset dis for(i = 0; i < size; i++){ if(flag[i] != 1){ if(matrix[min_num][i] != 0){ if((min + matrix[min_num][i]) < dis[i]){ dis[i] = min + matrix[min_num][i]; flag[i] = -1; } } } } // set min to 9999 max min = 9999; } // print the result printf("The result is : \n"); for(i = 0; i < size; i++){ printf("%d ", dis[i]); } return 0; } ```
cdcdcd
2022年11月27日 17:04
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码