Ошибка 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для чтения. - Если файл не открылся (ошибка открытия), то выполняется блок кода для обработки этой ошибки.