Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Please use java or python. Thanks a lot. Conjested Networks Given a connected co

ID: 3599669 • Letter: P

Question

Please use java or python. Thanks a lot.

Conjested Networks Given a connected computer network (bidirectional communication) we want to find two different nodes u and v such that we can maximize the congestion between u and v with a continuously sent virus being sent between the pair. We define the congestion level as the maximum number of edge-disjoint paths between nodes u and v. For example, the network shown in the following figure has three different paths between nodes 0 and 6 such that each edge is only part of one of the paths. Note that two paths are allowed to go through the same node, such as node 7. No other pair of nodes has a higher congestion evel. 6 7 Input Specification We will be given a sequence of connected computer networks each with n nodes, n 40, labeled (0,1, , n-1). The last input case will be followed by a network of n = 0 nodes, which should not be processed. The specification for a computer network will be as follows: the first line contains a single non-negative value n, denoting the number of nodes. This is then followed by n lines of integers, separated by spaces, denoting the neighbors (zero indexed) of each node. Expect up to 2000 test cases. Output Specification For each input case output one integer on a line by itself denoting the maximum congestion level possible for some pair of its network nodes.

Explanation / Answer

package assignment5_sharewithstudents;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Random;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.JFrame;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.border.EtchedBorder;

class GlobalVariables {
    public ArrayList<Fish> mFish;
    public FishTank mFishTank;

    private GlobalVariables() {
        mFish = new ArrayList<Fish>();
        mFishTank = new FishTank();
    }

    private static GlobalVariables instance;

    public static GlobalVariables getInstance() {
        if (instance == null){
            instance = new GlobalVariables();
        }
        return instance;
    }
}

class Fish implements Comparable<Fish>{
  
    int mX;
    int mY;
    int mId;
    Color mColor;
  
    public Fish(int id, int x, int y, Color color){
      
        mId = id;
        mX = x;
        mY = y;
        mColor = color;
    }
  
    public void paint(Graphics g){
      
        // Implement this function

    }
  
    public void move(){
       
        // Implement this function
      
    }

    @Override
    public int compareTo(Fish o) {
      
        // Implement this function

    }
}

class FishTick extends TimerTask{

    @Override
    public void run() {
   
        if (FishTank.mSimulateStatus){
          
            for (int x=0;x<GlobalVariables.getInstance().mFish.size();x++){
              
                Fish f = GlobalVariables.getInstance().mFish.get(x);
                f.move();
                GlobalVariables.getInstance().mFish.set(x, f);
            }
            
            GlobalVariables.getInstance().mFishTank.mDrawPanel.paint();
        }
    }
}

public class FishTank extends javax.swing.JFrame implements java.awt.event.MouseListener, java.awt.event.MouseMotionListener{
  
    private final int mNumRows = 20;
    private final int mNumCols = 20;
    private final int mGridSz = 30;
  
    private int mSelectedFishIndex = -1;
    private boolean mDragged = false;
  
    private int mTopHeight;
         
    JToolBar mToolbar;
    JToggleButton mSimulationButton;
    DrawPanel mDrawPanel;
  
    private int mFishIndex = 0;
  
    static public boolean mSimulateStatus = false;
  
    public static void main(String[] args) {

        GlobalVariables global = GlobalVariables.getInstance();
      
        if (global == null){
            System.out.println("Cannot initialize, exiting ....");
            return;
        }
      
    }

    private JToggleButton addButton(String title){
      
        JToggleButton button = new JToggleButton(title);
        button.addItemListener(new ItemListener() {
           public void itemStateChanged(ItemEvent ev) {
               mSimulateStatus = !mSimulateStatus;
           }
        });
      
        this.mToolbar.add(button);
      
        return (button);
    }
  
    public FishTank()
    {
        JFrame guiFrame = new JFrame();

        guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiFrame.setTitle("MY FISH TANK");
      
        // Create a toolbar and give it an etched border.
        this.mToolbar = new JToolBar();
        this.mToolbar.setBorder(new EtchedBorder());
      
        mSimulationButton = addButton("Simulate");
        this.mToolbar.add(mSimulationButton);

        //This will center the JFrame in the middle of the screen
        guiFrame.setLocationRelativeTo(null);
  
        this.mDrawPanel = new DrawPanel(mNumRows, mNumCols, mGridSz);
      
        this.mDrawPanel.setBackground(Color.cyan);
        this.mDrawPanel.paint();
      
        guiFrame.add(mDrawPanel);
        guiFrame.add(this.mToolbar, BorderLayout.NORTH);
      
        // Add the Exit Action
        JButton button = new JButton("Quit");
        button.setToolTipText("Quit the program");
        button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
        });
        mToolbar.add(button);
    
        guiFrame.addMouseListener(this);
        guiFrame.addMouseMotionListener(this);
      
        //make sure the JFrame is visible
        guiFrame.setVisible(true);
      
        mTopHeight = guiFrame.getInsets().top + mToolbar.getHeight();
        guiFrame.setSize(mNumRows * mGridSz, mNumCols * mGridSz + mTopHeight);
      
        Timer timer = new Timer("tick", true);
        timer.scheduleAtFixedRate(new FishTick(), Calendar.getInstance().get(Calendar.MILLISECOND), 500);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
      
        // Implement this function
    }

    @Override
    public void mousePressed(MouseEvent e) {
    }

    @Override
    public void mouseReleased(MouseEvent e) {
      
        // Implement this function
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

    @Override
    public void mouseDragged(MouseEvent e) {
      
        // Implement this function
    }

    @Override
    public void mouseMoved(MouseEvent e) {
    }
}

class DrawPanel extends JPanel{

    int mRows;
    int mCols;
    int mGridSz;
    int maxGridSz;
  
    ArrayList<Fish> mFish;
  
    public DrawPanel(int numberOfRows, int numberOfCols, int gridSz){
      
        mGridSz = gridSz;
        mRows = numberOfRows;
        mCols = numberOfCols;
        maxGridSz = mGridSz * mRows;
    }
  
    private void paintBackground(Graphics g){
      
        for (int i = 1; i < mRows; i++) {
            g.drawLine(i * mGridSz, 0, i * mGridSz, maxGridSz);
        }
      
        for (int mAnimateStatus = 1; mAnimateStatus < mCols; mAnimateStatus++) {
            g.drawLine(0, mAnimateStatus * mGridSz, maxGridSz, mAnimateStatus * mGridSz);
        }
    }
  
    @Override
    public void paintComponent(Graphics g){
      
        super.paintComponent(g);
      
        paintBackground(g);
      
        for (Fish f:GlobalVariables.getInstance().mFish){
            f.paint(g);
        }
      
    }

    public void paint(){
        repaint();
    }

}