码迷,mamicode.com
首页 > 编程语言 > 详细

二维数组最大连通子数组

时间:2015-06-23 00:34:09      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

设计思想:

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

源代码 :

 

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;
                                }
                                
                            }
                        }
                    }
                }
            }
        
    }

}

 

二维数组最大连通子数组

标签:

原文地址:http://www.cnblogs.com/xizhenghe/p/4594241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!