Análisis de red de Blue Bridge Cup (java)

[Descripción del problema]
Xiao Ming está haciendo un experimento de red.
Él configuró n computadoras, llamadas nodos, para enviar, recibir y almacenar datos.
Inicialmente, todos los nodos son independientes y no hay conexión.
Xiao Ming puede conectar dos nodos a través de un cable de red y los dos nodos pueden comunicarse entre sí después de la conexión
. Si dos nodos están conectados por un cable de red, se denominan adyacentes.
Xiao Ming a veces prueba la red en ese momento. Él enviará un mensaje a un nodo, y el mensaje se enviará
a cada nodo adyacente, y luego estos nodos se reenviarán a sus nodos adyacentes hasta que todos los nodos adyacentes directa
o indirectamente. todos han recibido la información. Todos los nodos emisores y receptores almacenarán la información.
Un dato se almacena solo una vez.
Dado el proceso de conexión y prueba de Xiaoming, calcule el tamaño de la información almacenada en cada nodo.
[Formato de entrada]
La primera línea de entrada contiene dos números enteros n, m, que representan respectivamente el número de nodos y el número de operaciones. Los nodos están
numerados del 1 al n.
En las siguientes m líneas, tres números enteros en cada línea representan una operación.
Si la operación es 1 ab, significa que el nodo ay el nodo b están conectados por un cable de red. Cuando a = b
, significa que hay un bucle automático conectado, lo que no tiene un impacto sustancial en la red.
Si la operación es de 2 pt, significa que se envía un mensaje de tamaño t en el nodo p.
[Formato de salida]
Muestra una línea, que contiene n enteros, separados por un espacio entre enteros adyacentes, indicando a su vez
el tamaño de la información almacenada en el nodo 1 al nodo n después de que se realizan las operaciones anteriores.

Idea de resolución de problemas : hable sobre la división de temas, ingrese los nodos de acuerdo con los requisitos y almacene la matriz nombrada, lea los nombres por turno y luego analice si conectar los nodos o transmitir datos. Si los nodos están conectados, el conocimiento de la lista enlazada se utiliza Para encadenar diferentes nodos en dos direcciones, si se va a transmitir datos, es combinar recursividad y lista enlazada, y almacenar la cantidad correspondiente de datos en cada nodo a su vez.

package 蓝桥杯;

import java.util.*;

public class 网络分析 {
    
    
	public static void main(String[] args) {
    
    
		Scanner in = new Scanner(System.in);
		//定义共有n个节点
		int n = in.nextInt();
		//定义共有m条操作
		int m = in.nextInt();
		List<wangLuoNode> node = new ArrayList<wangLuoNode>();
 		int[][] log = new int[m][3];
 		//创建节点
 		for(int i = 0;i < n;i++) {
    
    
			wangLuoNode next = new wangLuoNode(i,0);
			node.add(next);
 		}
		//输入操作
		for(int i = 0;i < m;i++) {
    
    
			for(int j = 0;j < 3;j++) {
    
    
				log[i][j] = in.nextInt();
			}
		}

		//查看节点信息量
		for(wangLuoNode temp:node) {
    
    
			System.out.println(temp.num+"号节点信息量为:"+temp.sum);
		}
		//执行命令
		for(int i = 0;i < m;i++) {
    
    
			//连接节点
			if(log[i][0] == 1) {
    
    
				if(log[i][1] != log[i][2]) {
    
    
					node.get(log[i][1]-1).node.add(node.get(log[i][2]-1));
					System.out.println();
					System.out.println(log[i][1]+"和"+log[i][2]+"建立连接了!");
					node.get(log[i][2]-1).node.add(node.get(log[i][1]-1));
					System.out.println();
					System.out.println(log[i][2]+"和"+log[i][1]+"建立连接了!");
				}
			}
			//传输数据
			else {
    
    
				int[] flag = new int[n];
				//给某个节点传输多少的量
				transhu(flag,node.get(log[i][1]-1),log[i][2]);
				//查看节点信息量
				System.out.println();
				for(wangLuoNode temp:node) {
    
    
					System.out.println(temp.num+"号节点信息量为:"+temp.sum);
				}
				System.out.println();
				System.out.println(log[i][1]+"传输了"+log[i][2]+"的信息!");
			}
		}
	}
	//进行遍历传输
	public static void transhu(int[] flag, wangLuoNode node,int text) {
    
    
		if(node.node.size() == 0) {
    
    
			node.sum += text;
			return;
		}
		for(int i = 0;i < node.node.size();i++){
    
    
			if(flag[node.node.get(i).num] != 1) {
    
    
				node.node.get(i).sum += text;
				flag[node.node.get(i).num] = 1;
			}else {
    
    
				continue;
			}
			transhu(flag,node.node.get(i),text);
		}
	}
}

class wangLuoNode{
    
    
	int num;
	int sum;
	List<wangLuoNode> node = new LinkedList<wangLuoNode>();
	public wangLuoNode(int num,int sum) {
    
    
		this.sum = sum;
		this.num = num;
	}
}

Supongo que te gusta

Origin blog.csdn.net/baldicoot_/article/details/109059625
Recomendado
Clasificación