Вопрос о вставке и удалении узлов и ребер графа
Привет друзья и гиды у меня есть еще одна проблема, которая заключается в программе на языке Си для вставки и удаления узлов и ребер в неориентированном графе с использованием матрицы смежности.
Я выпучил глаза и получил несколько программ, в которых было много ошибок. Но я получил следующий, который лучше их, но все еще не бежит. пожалуйста, помогите мне, исправив и исправив его.
#include<stdio.h> #define max 20 int adj[ max ][ max ]; int n; main() { int choice; int node, origin, destin; create_graph(); while ( 1 ) { printf( "1.Insert a node\n" ); printf( "2.Insert an edge\n" ); printf( "3.Delete a node\n" ); printf( "4.Delete an edge\n" ); printf( "5.Dispaly\n" ); printf( "6.Exit\n" ); printf( "Enter your choice : " ); scanf( "%d", &choice ); switch ( choice ) { case 1: insert_node(); break; case 2: printf( "Enter an edge to be inserted : " ); fflush( stdin ); scanf( "%d %d", &origin, &destin ); insert_edge( origin, destin ); break; case 3: printf( "Enter a node to be deleted : " ); fflush( stdin ); scanf( "%d", &node ); delete_node( node ); break; case 4: printf( "Enter an edge to be deleted : " ); fflush( stdin ); scanf( "%d %d", &origin, &destin ); del_edge( origin, destin ); break; case 5: display(); break; case 6: exit(); default: printf( "Wrong choice\n" ); break; } /*End of switch*/ } /*End of while*/ } /*End of main()*/ create_graph() { int i, max_edges, origin, destin; printf( "Enter number of nodes : " ); scanf( "%d", &n ); max_edges = n * ( n – 1 ); /* Taking directed graph */ for ( i = 1;i <= max_edges;i++ ) { printf( "Enter edge %d( 0 0 ) to quit : ", i ); scanf( "%d %d", &origin, &destin ); if ( ( origin == 0 ) && ( destin == 0 ) ) break; if ( origin > n || destin > n || origin <= 0 || destin <= 0 ) { printf( "Invalid edge!\n" ); i–; } else adj[ origin ][ destin ] = 1; } /*End of for*/ } /*End of create_graph()*/ display() { int i, j; for ( i = 1;i <= n;i++ ) { for ( j = 1;j <= n;j++ ) printf( "%4d", adj[ i ][ j ] ); printf( "\n" ); } } /*End of display()*/ insert_node() { int i; n++; /*Increase number of nodes in the graph*/ printf( "The inserted node is %d \n", n ); for ( i = 1;i <= n;i++ ) { adj[ i ][ n ] = 0; adj[ n ][ i ] = 0; } } /*End of insert_node()*/ delete_node( char u ) { int i, j; if ( n == 0 ) { printf( "Graph is empty\n" ); return ; } if ( u > n ) { printf( "This node is not present in the graph\n" ); return ; } for ( i = u;i <= n – 1;i++ ) for ( j = 1;j <= n;j++ ) { adj[ j ][ i ] = adj[ j ][ i + 1 ]; /* Shift columns left */ adj[ i ][ j ] = adj[ i + 1 ][ j ]; /* Shift rows up */ } n–; /*Decrease the number of nodes in the graph */ } /*End of delete_node*/ insert_edge( char u, char v ) { if ( u > n ) { printf( "Source node does not exist\n" ); return ; } if ( v > n ) { printf( "Destination node does not exist\n" ); return ; } adj[ u ][ v ] = 1; } /*End of insert_edge()*/ del_edge( char u, char v ) { if ( u > n || v > n || adj[ u ][ v ] == 0 ) { printf( "This edge does not exist\n" ); return ; } adj[ u ][ v ] = 0; } /*End of del_edge()*/
LaxmikantYadav
Пожалуйста, укажите тип возврата для всех пользовательских функций defiend.
CurrentlyBE
спасибо, но я знал это..