• 大小: 11KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: Java
  • 标签: Java    结点  着色  

资源简介

Java实现图结点着色图形化演示,里面包含完整源代码,是学习算法设计不可多得的好材料,各位亲,心动不如行动啊,赶快下载吧!

资源截图

代码片段和文件信息

import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;

/**
 * 实现作图和对点着色的算法
 * @author zzx
 *
 */
public class DuoBianXing {
 private int startX;// 顶点的X坐标
 private int startY;// 顶点的Y坐标
 private int r;// 外接圆的半径
 List ps = new ArrayList();
 List ls = new ArrayList();
 PaintColor pc;
 
 public DuoBianXing( PaintColor pc) {
 this.pc = pc;
 startX = 400;
 startY = 10;
 r = 200;
 }
 /**
  * 确定每个点的位置
  * @param size 顶点的个数(多边形的边数)
  */
 public void posOfPoint(int size) {
 ps.add(new Point(startXstartYColor.RED pc));
 Point p;
 for (int i = 1; i < size; i++) {
 p = nextPoint(((2 * Math.PI) / size) * i);
 ps.add(p);
 }
 }
 /**
  * 在顶点处建立直角坐标系,用r和arc确定下一个点的坐标
  * @param arc 为弧度
  * @return 下一个点的坐标
  */
 public Point nextPoint(double arc) {
 int x = (int) (startX - r * Math.sin(arc));
 int y = (int) (startY + r - r * Math.cos(arc));
 Point p = new Point(x yColor.YELLOW pc);
 return p;
 }
 /**
  * 计算产生count条边
  * @param count 不连通图中边的个数
  */
 public void posOfLine(int count){
 int m = count - ps.size();
 
 for(int i = 1; i <= count; i++ ){
 if(i < ps.size()){
 ls.add(getLine(ps.get(i-1) ps.get(i)));
 }
 else if(i == ps.size() ){
 ls.add(getLine(ps.get(0) ps.get(i-1)));
 }
 else{
 if( m <= 0 ) continue;
 if(m >= 2 ){
 ls.add(getLine(ps.get(m-2) ps.get(m)));
 }else{
 ls.add(getLine(ps.get(1) ps.get(ps.size()-1)));
 }
 m--;
 }
 }
 }
 
 public Line getLine(Point p1 Point p2){
 Line l =  new Line(p1 p2 pc);
 return l;
 }
 
 public void draw(Graphics g){
g.drawString(“点数:“+ ps.size() 10 10);
g.drawString(“边数:“+ ls.size() 10 20);

pointColorTest(0 ps ls);

for(int i = 0; i < ps.size(); i++ ){
Point p1 = ps.get(i);
p1.draw(g);
}

for(int i = 0; i < ls.size(); i++ ){
Line l = ls.get(i);
l.draw(g);
}
 }
 /**
  * 递归判断下标为num的点与 在点集中下标大于num之后的点是否有连线,
  * 若有,在判断两点颜色,一样则把之后的点涂上随机颜色,不一样则继续,若无连线,就涂上num相同的颜色
  * @param num 当前递归时的点下标
  * @param ps 点集
  * @param ls 边集
  */
 public void pointColorTest(int num List ps List ls){
 if(num == ps.size()){
 return ;
 }
 Point point = ps.get(num) p;
 for(int i = num+1; i < ps.size(); i++){
 p = ps.get(i);
 if(! pointIsConnect(point  p ls) ){
 p.color = point.color;
 }
 else{
 if( isColorIsValid(point.color p.color)){
 p.color = selectColor(point.color);
 }
 } 
  }
 if(num == ps.size()-1){
 for(int i = 0; i < ps.size()-1; i++){
 p = ps.get(i);
 if(pointIsConnect(point  p ls) ){
 if( isColorIsValid(p.color point.color)){
 point.color = selectColor(p.color);
 }
 }
 }
 }
 pointColorTest( ++num ps ls);
 }
 /**
  * 判断两点是否在一条线上
  */
 publ

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        232  2006-01-01 00:45  图结点着色\.classpath

     文件        388  2006-01-01 00:45  图结点着色\.project

     文件       4476  2006-01-01 00:47  图结点着色\bin\DuoBianXing.class

     文件       1249  2006-01-01 00:46  图结点着色\bin\Line.class

     文件        888  2006-01-01 00:46  图结点着色\bin\PaintColor$MyPanel.class

     文件       3366  2006-01-01 00:46  图结点着色\bin\PaintColor.class

     文件       1011  2006-01-01 00:46  图结点着色\bin\Point.class

     文件       3983  2006-01-01 00:47  图结点着色\src\DuoBianXing.java

     文件        624  2006-01-01 00:46  图结点着色\src\Line.java

     文件       3086  2006-01-01 00:46  图结点着色\src\PaintColor.java

     文件        483  2006-01-01 00:46  图结点着色\src\Point.java

     目录          0  2014-11-27 13:47  图结点着色\bin

     目录          0  2014-11-27 13:47  图结点着色\src

     目录          0  2014-11-27 13:47  图结点着色

----------- ---------  ---------- -----  ----

                19786                    14


评论

共有 条评论