Ошибка 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") ) ) {
    /* обработать ошибку открытия файла */
}

Объяснение кода листинга программы

  1. Открывается файл in.txt для чтения.
  2. Если файл не открылся (ошибка открытия), то выполняется блок кода для обработки этой ошибки.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5