用任何程序设计语言实现贪心法给图的所有结点着色.

[复制链接]
查看11 | 回复0 | 2005-12-23 08:49:40 | 显示全部楼层 |阅读模式
import java.applet.*;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import java.awt.geom.*;import java.io.*;class Point implements Serializable{int x,y;Color col;int tool;int boarder;Point(int x, int y, Color col, int tool, int boarder){this.x = x; this.y = y;this.col = col;this.tool = tool;this.boarder = boarder;}}class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener{int x = -1, y = -1;int con = 1;//画笔大小int Econ = 5;//橡皮大小int toolFlag = 0;//toolFlag:工具标记//toolFlag工具对应表://(0--画笔);(1--橡皮);(2--清除);//(3--直线);(4--圆);(5--矩形);Color c = new Color(0,0,0); //画笔颜色BasicStroke size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);//画笔粗细Point cutflag = new Point(-1, -1, c, 6, con);//截断标志Vector paintInfo = null;//点信息向量组int n = 1;FileInputStream picIn = null;FileOutputStream picOut = null;ObjectInputStream VIn = null;ObjectOutputStream VOut = null;// *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/Panel toolPanel;Button eraser, drLine,drCircle,drRect;Button clear ,pen;Choice ColChoice,SizeChoice,EraserChoice;Button colchooser;Label 颜色,大小B,大小E;//保存功能Button openPic,savePic;FileDialog openPicture,savePicture;paintboard(String s){super(s);addMouseMotionListener(this);addMouseListener(this);paintInfo = new Vector();/*各工具按钮及选择项*///颜色选择ColChoice = new Choice();ColChoice.add("black");ColChoice.add("red");ColChoice.add("blue");ColChoice.add("green");ColChoice.addItemListener(this);//画笔大小选择SizeChoice = new Choice();SizeChoice.add("1");SizeChoice.add("3");SizeChoice.add("5");SizeChoice.add("7");SizeChoice.add("9");SizeChoice.addItemListener(this);//橡皮大小选择EraserChoice = new Choice();EraserChoice.add("5");EraserChoice.add("9");EraserChoice.add("13");EraserChoice.add("17");EraserChoice.addItemListener(this);////////////////////////////////////////////////////toolPanel = new Panel();clear = new Button("清除");eraser = new Button("橡皮");pen = new Button("画笔");drLine = new Button("画直线");drCircle = new Button("画圆形");drRect = new Button("画矩形");openPic = new Button("打开图画");savePic = new Button("保存图画");colchooser = new Button("显示调色板");//各组件事件监听clear.addActionListener(this);eraser.addActionListener(this);pen.addActionListener(this);drLine.addActionListener(this);drCircle.addActionListener(this);drRect.addActionListener(this);openPic.addActionListener(this);savePic.addActionListener(this);colchooser.addActionListener(this);颜色 = new Label("画笔颜色",Label.CENTER);大小B = new Label("画笔大小",Label.CENTER);大小E = new Label("橡皮大小",Label.CENTER);//面板添加组件toolPanel.add(openPic);toolPanel.add(savePic);toolPanel.add(pen);toolPanel.add(drLine);toolPanel.add(drCircle);toolPanel.add(drRect);toolPanel.add(颜色); toolPanel.add(ColChoice); toolPanel.add(大小B); toolPanel.add(SizeChoice);toolPanel.add(colchooser);toolPanel.add(eraser);toolPanel.add(大小E); toolPanel.add(EraserChoice); toolPanel.add(clear);//工具面板到APPLET面板add(toolPanel,BorderLayout.NORTH);setBounds(60,60,900,600); setVisible(true);validate();//dialog for save and loadopenPicture = new FileDialog(this,"打开图画",FileDialog.LOAD);openPicture.setVisible(false);savePicture = new FileDialog(this,"保存图画",FileDialog.SAVE);savePicture.setVisible(false);openPicture.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ openPicture.setVisible(false); }});savePicture.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ savePicture.setVisible(false); }});addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ System.exit(0);}});}public void paint(Graphics g){Graphics2D g2d = (Graphics2D)g;Point p1,p2;n = paintInfo.size();if(toolFlag==2)g.clearRect(0,0,getSize().width,getSize().height);//清除for(int i=0; i<n ;i++){p1 = (Point)paintInfo.elementAt(i);p2 = (Point)paintInfo.elementAt(i+1);size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);g2d.setColor(p1.col);g2d.setStroke(size);if(p1.tool==p2.tool){switch(p1.tool){case 0://画笔Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);g2d.draw(line1);break;case 1://橡皮g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);break;case 3://画直线Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);g2d.draw(line2);break;case 4://画圆Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y));g2d.draw(ellipse);break;case 5://画矩形Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y));g2d.draw(rect);break;case 6://截断,跳过i=i+1;break;default :}//end switch}//end if}//end for}public void itemStateChanged(ItemEvent e){if(e.getSource()==ColChoice)//预选颜色{String name = ColChoice.getSelectedItem();if(name=="black"){c = new Color(0,0,0); }else if(name=="red"){c = new Color(255,0,0);}else if(name=="green"){c = new Color(0,255,0);}else if(name=="blue"){c = new Color(0,0,255);}}else if(e.getSource()==SizeChoice)//画笔大小{String selected = SizeChoice.getSelectedItem();if(selected=="1"){con = 1; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);}else if(selected=="3"){con = 3; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);}else if(selected=="5"){con = 5; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);}else if(selected=="7"){con = 7; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);}else if(selected=="9"){con = 9; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);}}else if(e.getSource()==EraserChoice)//橡皮大小{String Esize = EraserChoice.getSelectedItem();if(Esize=="5"){ Econ = 5*2; }else if(Esize=="9"){ Econ = 9*2; }else if(Esize=="13"){ Econ = 13*2; }else if(Esize=="17"){ Econ = 17*3; }}}public void mouseDragged(MouseEvent e){Point p1 ;switch(toolFlag){case 0://画笔x = (int)e.getX(); y = (int)e.getY();p1 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p1);repaint();break;case 1://橡皮x = (int)e.getX(); y = (int)e.getY();p1 = new Point(x, y, null, toolFlag, Econ);paintInfo.addElement(p1);repaint();break;default :}}public void mouseMoved(MouseEvent e) {}public void update(Graphics g){paint(g);}public void mousePressed(MouseEvent e) {Point p2;switch(toolFlag){case 3://直线x = (int)e.getX(); y = (int)e.getY();p2 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p2);break;case 4: //圆x = (int)e.getX(); y = (int)e.getY();p2 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p2);break;case 5: //矩形x = (int)e.getX(); y = (int)e.getY();p2 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p2);break;default :}}public void mouseReleased(MouseEvent e){Point p3;switch(toolFlag){case 0://画笔paintInfo.addElement(cutflag);break;case 1: //eraserpaintInfo.addElement(cutflag);break;case 3://直线x = (int)e.getX(); y = (int)e.getY();p3 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p3);paintInfo.addElement(cutflag);repaint();break;case 4: //圆x = (int)e.getX(); y = (int)e.getY();p3 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p3);paintInfo.addElement(cutflag);repaint();break;case 5: //矩形x = (int)e.getX(); y = (int)e.getY();p3 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p3);paintInfo.addElement(cutflag);repaint();break;default:}}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e){}public void actionPerformed(ActionEvent e){if(e.getSource()==pen)//画笔{toolFlag = 0;}if(e.getSource()==eraser)//橡皮{toolFlag = 1;}if(e.getSource()==clear)//清除{toolFlag = 2;paintInfo.removeAllElements();repaint(); }if(e.getSource()==drLine)//画线{toolFlag = 3;}if(e.getSource()==drCircle)//画圆{toolFlag = 4;}if(e.getSource()==drRect)//画矩形{toolFlag = 5;}if(e.getSource()==colchooser)//调色板{Color newColor = JColorChooser.showDialog(this,"调色板",c);c = newColor;}if(e.getSource()==openPic)//打开图画{openPicture.setVisible(true);if(openPicture.getFile()!=null){int tempflag;tempflag = toolFlag;toolFlag = 2 ;repaint();try{paintInfo.removeAllElements();File filein = new File(openPicture.getDirectory(),openPicture.getFile());picIn = new FileInputStream(filein);VIn = new ObjectInputStream(picIn);paintInfo = (Vector)VIn.readObject();VIn.close();repaint();toolFlag = tempflag;}catch(ClassNotFoundException IOe2){repaint();toolFlag = tempflag;System.out.println("can not read object");}catch(IOException IOe) {repaint();toolFlag = tempflag;System.out.println("can not read file");}}}if(e.getSource()==savePic)//保存图画{savePicture.setVisible(true);try{File fileout = new File(savePicture.getDirectory(),savePicture.getFile());picOut = new FileOutputStream(fileout);VOut = new ObjectOutputStream(picOut);VOut.writeObject(paintInfo);VOut.close();}catch(IOException IOe) {System.out.println("can not write object");}}}}//end paintboardpublic class pb{public static void main(String args[]){ new paintboard("画图程序"); }}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行