***********ALGORTIMO PARA GRAFO NO DIRIGIDO MATRIZ DE ADYACENCIA***********************

System.out.println("Numero de vertices");
    int numVertices = sc.nextInt();
    int i=0;
    int j=0;
    int[][] adyacencia = new int[numVertices][numVertices];

    while(i<numVertices){

        while(j<numVertices){
            System.out.println("");
            System.out.println("Responder (si/no):");
            System.out.println("El vertice "+i+" es adyacente al vertice "+j+" ?");
            String respuesta = sc.nextLine();

            if(respuesta.equals("si")){
                adyacencia[i][j]=1;
            }else
            {
                adyacencia[i][j]=0;
            }
            j=j+1;
        }
        i=i+1;
        j=0;
    }

Algoritmo 2 (Los datos se obtienen de la lista de aristas):
def create_adjacency_matrix(graph):
    # Obtener el número de nodos en el grafo
    num_nodes = max(max(edge) for edge in graph) + 1

    # Crear una matriz cuadrada llena de ceros
    adjacency_matrix = [[0] * num_nodes for _ in range(num_nodes)]

    # Llenar la matriz con las conexiones del grafo
    for edge in graph:
        node1, node2 = edge
        adjacency_matrix[node1][node2] = 1
        adjacency_matrix[node2][node1] = 1  # Si es un grafo no dirigido, también se establece la conexión inversa

    return adjacency_matrix


***********ALGORTIMO PARA GRAFO NO DIRIGIDO MATRIZ DE INCIDENCIA***********************

System.out.println("Numero de vertices");
	    int numVertices = sc.nextInt();
	    System.out.println("Numero de lados");
	    int numLados = sc.nextInt();
	    
	    int i=0;
	    int j=0;
	    int[][] incidencia = new int[numVertices][numLados];
	    String respuesta;
	    sc.nextLine();
	    while(i<numVertices){

	        while(j<numLados){
	            System.out.println("");
	            System.out.println("Responder (si/no):");
	        
	            System.out.println("El vertice "+i+" cuenta con el lado "+j+" ?");
	            respuesta = sc.nextLine();
	            
	            if(respuesta.equals("si")){
	                incidencia[i][j]=1;
	            }else
	            {
	                incidencia[i][j]=0;
	            }
	            j=j+1;
	        }
	        i=i+1;
	        j=0;
	    }

Algoritmo 2 (Los datos se obtienen de la lista de aristas):

def create_incidence_matrix(graph):
    # Obtener el número de nodos y aristas en el grafo
    num_nodes = max(max(edge) for edge in graph) + 1
    num_edges = len(graph)

    # Crear una matriz rectangular llena de ceros
    incidence_matrix = [[0] * num_edges for _ in range(num_nodes)]

    # Llenar la matriz con las conexiones del grafo
    for i, edge in enumerate(graph):
        node1, node2 = edge
        incidence_matrix[node1][i] = 1
        incidence_matrix[node2][i] = 1

    return incidence_matrix