zoukankan      html  css  js  c++  java
  • 二维数组最大连通子数组

    设计思想:

    主要用数据结构中遍历的思想,按照一定次序访问,不通则回溯。改程序已经做成界面版,在消灭星星中运用。

    源代码 :

    package star;

    import java.awt.Component;
    import java.awt.Container;
    import java.awt.GridLayout;
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Random;

    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;

    public class Star extends JFrame implements ActionListener{
        int[][] random;
        JButton[][] star;
         int[][] visited;//用于判断是否被访问过若未被访问过为0访问过为1需要回溯则为3
         JLabel back;
        public Star() {
            // TODO Auto-generated constructor stub
            this.setTitle("消灭星星");
            ImageIcon im=new ImageIcon("5.jpg");
            Image image=im.getImage();//对窗体图标的设置
            this.setIconImage(image);
            this.setSize(515, 710);
            this.setLocation(100, 0);
            this.setLayout(null);//窗体设置,布局为空
            
            Container con=this.getContentPane();//加一个容器
            
            JPanel panel=new JPanel();//添加一个面板把控件都放在面板上
            con.add(panel);
            panel.setSize(500, 700);
            panel.setLocation(0, 0);
            panel.setLayout(null);//设置为网格布局
            
            ImageIcon ii=new ImageIcon("7.jpg");//添加背景图片
            back=new JLabel(ii);
            back.setSize(500, 700);
            back.setLocation(0, 0);
            panel.add(back);
            
            random=new int[10][10];//把产生的随机数存入二维矩阵二维矩阵数字元素和图片名称相对应
            star=new JButton[10][10];//申请按钮矩阵
            
            Random ran=new Random();//产生随机数用于显示随机图片
            for(int i=0;i<10;i++)
            {
                for(int j=0;j<10;j++)
                {
                    random[i][j]=ran.nextInt(4)+1;
                }
            }
            
            for(int i=0;i<10;i++)
            {
                for(int j=0;j<10;j++)
                {
                    String str=Integer.toString(random[i][j]);//把产生的随机整肃转化为字符串类型
                    String stri=str+".jpg";//和图片格式连接 生成"x.jpg"的字符串
                    ImageIcon icon=new ImageIcon(stri);//实例化图片
                    star[i][j]=new JButton(icon);//实例化按钮
                    star[i][j].setSize(50, 50);//按钮的位置大小的设置
                    star[i][j].setLocation(50*i, 50*j+180);
                    star[i][j].setVisible(true);//图片设置为可见性
                    star[i][j].addActionListener((ActionListener) this);
                    back.add(star[i][j]);//加入按钮,只有把按钮放在背景上才不会出现 只有当鼠标放在按钮上才显示按钮
                }
            } 
            visited=new int[10][10];//实例化存储访问性的数组
            for(int i=0;i<10;i++)
            {
                for(int j=0;j<10;j++)
                {
                    visited[i][j]=0;//初始化设置为0表示均未访问            
                }
            }
        }

        /**
         * 
    @param args
         
    */
        public static void main(final String[] args) {
            // TODO Auto-generated method stub

            Star s=new Star();
            s.setVisible(true);
        }

        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub

                for(int i=0;i<10;i++)
                {
                    for(int j=0;j<10;j++)
                    {
                        if(e.getSource()==star[i][j])
                        {
                            int a=i;
                            int b=j;
                            star[i][j].setVisible(false);
                            visited[a][b]=1;
                            int count=1;
                            boolean flag=true;
                            while(flag==true)
                            {//按照左下右上的顺序 visited[][]为0表示没被访问过1表示访问过3表示访问过并且不需要回溯
                                if(b-1>=0&&random[a][b]==random[a][b-1]&&visited[a][b-1]==0)
                                {
                                    visited[a][b-1]=1;                                
                                    b=b-1;
                                    count++;
                                    star[a][b].setVisible(false);
                                }
                                else if(a+1<=9&&random[a][b]==random[a+1][b]&&visited[a+1][b]==0)
                                {
                                    visited[a+1][b]=1;
                                    
                                    a=a+1;
                                    count++;
                                    star[a][b].setVisible(false);
                                }
                                else if(b+1<=9&&random[a][b]==random[a][b+1]&&visited[a][b+1]==0)
                                {
                                    visited[a][b+1]=1;
                                    
                                    b=b+1;
                                    count++;
                                    
                                    star[a][b].setVisible(false);
                                }
                                else if(a-1>=0&&random[a][b]==random[a-1][b]&&visited[a-1][b]==0)
                                {
                                    visited[a-1][b]=1;
                                    
                                    a=a-1;
                                    count++;
                                    
                                    star[a][b].setVisible(false);
                                }
                                else//都不满足开始回溯
                                {
                                    if(b-1>=0&&random[a][b-1]==random[a][b]&&visited[a][b-1]==1)
                                    {
                                        visited[a][b]=3;
                                        b=b-1;
                                        count++;
                                        System.out.println(a+","+b);
                                    }
                                    else if(a+1<=9&&random[a+1][b]==random[a][b]&&visited[a+1][b]==1)
                                    {
                                        visited[a][b]=3;
                                        a=a+1;
                                        count++;
                                        System.out.println(a+","+b);
                                    }
                                    else if(b+1<=9&&random[a][b+1]==random[a][b]&&visited[a][b+1]==1)
                                    {
                                        visited[a][b]=3;
                                        b=b+1;
                                        count++;
                                        System.out.println(a+","+b);
                                    }
                                    else if(a-1>=0&&random[a-1][b]==random[a][b]&&visited[a-1][b]==1)
                                    {
                                        visited[a][b]=3;
                                        a=a-1;
                                        count++;
                                        System.out.println(a+","+b);
                                    }
                                    else
                                    {
                                         System.out.println("所有星星已被消灭完!");
                                         flag=false;
                                    }
                                    
                                }
                            }
                        }
                    }
                }
            
        }

    }
  • 相关阅读:
    snmp扫描
    操作系统扫描
    服务扫描
    端口扫描,僵尸机扫描
    主动信息收集:四层发现
    主动信息收集:三层发现
    主动信息收集:二层发现
    RECON-NG
    metadata信息的采集
    cupp字典生成器使用
  • 原文地址:https://www.cnblogs.com/xizhenghe/p/4594241.html
Copyright © 2011-2022 走看看