gpt4 book ai didi

java - 邻接矩阵(java)中的邻居(int参数)遇到一些问题

转载 作者:行者123 更新时间:2023-12-01 13:34:54 25 4
gpt4 key购买 nike

我需要朝着正确的方向迈出一步。过去几个小时我一直在努力解决这个问题。

我已经设置了邻接矩​​阵,但无法弄清楚neighbors(int i)方法如何计算出有多少个相邻顶点与顶点i相关,然后让neighbors以整数形式返回这些关联顶点的集合表格。

代码就像

 public class Graph {

// Setup privately modified variables which will define the graph

// These two parameters are storage variables for edges and vertices
private int vertex;
private int edge;

// This will be the adjacency matrix to represent out graph, this will represent edges.
private static boolean[][] adj_Matrix_Edges;
// This will be an array to store the vertices.
private int[] adj_Matrix_Vertices;

// first step will be to setup the graph, using this constructor
public Graph() {

// Initialize the scanner for user's input on vertices.
Scanner scan = new Scanner(System.in);

// define local variable for user input.
int num_vertices;
num_vertices = vertex;

// ask for user input
System.out
.println("Please enter how many nodes will be on the graph: ");
num_vertices = scan.nextInt();

// make a runtime exception for nonnegative values.
if (num_vertices < 0) {
throw new RuntimeException(
"Number of vertices cannot be a nonnegative value");}

System.out.println("There are now " + num_vertices + " vertices in the graph.");

// Vertices are stored in a one dimensional array.
adj_Matrix_Vertices = new int[num_vertices];


// A graph is created based on the user's specifications, N X N or (n^2) graph.
adj_Matrix_Edges = new boolean[num_vertices][num_vertices];
}

//This method validates whether or not two vertices are adjacent, returns true if adjacent false otherwise.
public boolean adjacent(int i, int j) {

if (adj_Matrix_Edges[i][j] == true) {
System.out.println("The vertex " + i + " and vertex " + j + " are adjacent.");
return true;}
else{
System.out.println("The vertex " + i + " and vertex " + j + " are not adjacent");
return false;}
}

public void neighbors(int i){

int j = i;

}


// This method adds an edge if the two int values in the 2-d boolean array are false, converts to true otherwise stays true if already an edge present
public void addEdge(int vertex_add_1, int vertex_add_2) {

if (adj_Matrix_Edges[vertex_add_1][vertex_add_2] == false) {
adj_Matrix_Edges[vertex_add_1][vertex_add_2] = true;
adj_Matrix_Edges[vertex_add_2][vertex_add_1] = true;
} else {
System.out.println("There is already an edge between vertex " + vertex_add_1 + " and vertex " + vertex_add_2 + ".");
}
}

// This method removes an edge if the two int values in the 2-d boolean array are true, converts to false, otherwise it stays false if no edge present
public void removeEdge(int vertex_remove_1, int vertex_remove_2) {

if (adj_Matrix_Edges[vertex_remove_1][vertex_remove_2] == true) {
adj_Matrix_Edges[vertex_remove_1][vertex_remove_2] = false;
adj_Matrix_Edges[vertex_remove_1][vertex_remove_2] = false;
} else {
System.out.println("There is no edge between vertex "
+ vertex_remove_1 + " and vertex " + vertex_remove_2);
}
}

public static void main(String[] args) {

Graph graph = new Graph();

graph.addEdge(1, 2);
graph.removeEdge(0, 1);
graph.adjacent(1, 2);
graph.adjacent(2, 1);

for (int i = 0; i < adj_Matrix_Edges.length; i++){
for (int j = 0; j < adj_Matrix_Edges[i].length; j++){
System.out.println(adj_Matrix_Edges[i][j] + " ");
}
System.out.println("-----");
}

}
}

最佳答案

您必须迭代邻接矩阵中表示顶点边的列。如果您想获取相邻顶点的数量,只需将该列中的真实值相加即可。如果您想获取邻居的集合,请返回具有真实值的列中的索引

public List<Integer> getNeighbors(int vertex) {
List<Integer> neighbors = new ArrayList<Integer>();
for (int i = 0; i < adj_Matrix_Edges.length; i++){
if(adj_Matrix_Edges[vertex][i]) {
neighbors.add(i);
}
}
return neighbors;
}

编辑:

 public int[] getNeighborCount(int vertex) {
int neighborCount = 0;
for (int i = 0; i < adj_Matrix_Edges.length; i++){
if(adj_Matrix_Edges[vertex][i]) {
neighborCount++;
}
}
return neighborCount;
}

public int[] getNeighbors(int vertex) {
int[] neighbors = new int[getNeighborCount()];
int j = 0;
for (int i = 0; i < adj_Matrix_Edges.length; i++){
if(adj_Matrix_Edges[vertex][i]) {
neighbors[j++] = i;
}
}
return neighbors;
}

关于java - 邻接矩阵(java)中的邻居(int参数)遇到一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21361806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com