Ошибка Debug Asserition Failed Expression:(stream !=NULL) - C (СИ)
Формулировка задачи:
Задание: Написать графф и в нем реализовать алгоритм Дейкстры и обход в ширину и высоту. (Прикрепляю код и скрин с ошибкой) помогите, кто сможет. Задание по практике нужно уложиться до 16.07вот скрин с ошибкой
#include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> int g[1000][1000]; // граф int n; // число вершин int s; // стартовая вершина (вершины везде нумеруются с нуля) int v_dfs[1000];int i_v_dfs; int used1[1000]; int v_bfs[1000][1000]={0}; int i_v_bfs; int used[500]={0};//массив использованных вершин int d[500]={0};//массив длин пути int inf=1000000000;//условная бесконечность void dfs(int node_index) { int i; used1[node_index] = 1; v_dfs[i_v_dfs]=node_index; i_v_dfs=i_v_dfs+1; for (i=0; i<n; ++i) { if (g[node_index][i] && !used1[i]) dfs(i); } } void input_graf() { FILE *in; int i,j; in=fopen("in.txt","r"); i_v_dfs=i_v_dfs=0; fscanf(in,"%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) fscanf(in,"%d",&g[i][j]); for(i=0;i<n;i++) used1[i]=0; } void bfs(int start) { int visited[1000],i,j; int curr; int queue[1000]; int r = 0, w = 1; for(i=0;i<n;i++) visited[i]=0; queue[0] = start; visited[start] = 1; while (r < w) { curr = queue[r++]; for (i = 0; i < n; i++) if (!visited[i] && g[curr][i]) { visited[i] = 1; queue[w++] = i; v_bfs[i_v_bfs][v_bfs[i_v_bfs][0]+1]=i+1; v_bfs[i_v_bfs][0]++; } i_v_bfs++; } } void deikstr(int v1,int v2) { int m,x=0,y=0,z=0,i,j,to; m=n; for (i=0;i<n;i++) d[i]=inf; d[v1]=0; while (1){ int from,zfrom=inf; for (i=0;i<n;i++) if ((zfrom>d[i]) && !(used[i])) {from=i;zfrom=d[i];} if (zfrom>=inf) break; used[from]=1; for(to=0;to<n;to++) if (g[from][to]!=0) if ((!used[to]) && (d[to]>d[from]+g[from][to])) d[to]=d[from]+g[from][to]; } if (d[v2]<inf) printf("%d",d[v2]);else printf("Нет пути!"); } int main() { int i,j,a,b; input_graf(); dfs(0); printf("Poisk v glubinu(istoriya puti):\n"); for(i=0;i<n;i++) printf("%d\t",v_dfs[i]+1); printf("\n\nPoisk v shirinu(vivod vershin po stepeni udalennosti ot pervoy):\n"); bfs(0); for(i=0;i<i_v_bfs;i++) { if(v_bfs[i][0]!=0) for(j=1;j<v_bfs[i][0]+1;j++) printf("%d\t",v_bfs[i][j]); printf("\n"); } a=1;b=3; printf("\nDlina kratchaishego puti ot vershini %d do vershini %d: ",a+1,b+1); deikstr(a,b); printf("\n\n"); return 0; }
Решение задачи: «Ошибка Debug Asserition Failed Expression:(stream !=NULL)»
textual
Листинг программы
if ( ! ( in = fopen("in.txt", "r") ) ) { /* обработать ошибку открытия файла */ }
Объяснение кода листинга программы
- Открывается файл
in.txt
для чтения. - Если файл не открылся (ошибка открытия), то выполняется блок кода для обработки этой ошибки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д