import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Color;
import java.awt.*;
public class idela3tsp extends java.applet.Applet{

    double dblMinD;
    double dblDD;
    int idim[]=new int[100];
    int intmindim[]=new int[100];
    int intk;

    double xx1;
    double yy1;
    double xx2;

    double gdblX1[]=new double[10000];
    double gdblY1[]=new double[10000];
    int gintZMin[]=new int[100];
    int gintZ[]=new int[100];
    int gintZ2[]=new int[100];


    Color col1,col2;
    int N;
    int taka,haba,taka2,haba2;

long debugnum;

    long kaiNum;

    long longKumiNum;

    long lngCnt;
    long lngCntDela;

    int k,i,j,l,kaw;
    double di2,di,cp2,cpx,ys,t,th;
    double x0,y0,xx,yy,xa1,ya1,yy2;
    double di4,di3,cp3,cpx3,ys3,t2,ds,us;
    double y20,y21,sa0,sa1;
    int br,br2,u,k2;
    int xz,xz2,yz,yz2;
    String NS,habaS,takaS;
    double Nd,takad,habad;
    Color cl[]=new Color[13];
    double kx[]=new double[10000];
    double ky[]=new double[10000];
    double kz[]=new double[10000];
    public double jou(double a,double b){
        double jou1;
        jou1=Math.pow(a,b);
        return jou1;
    }

    public void koukan(int k1, int k2){
        int iw;
        iw = gintZ2[k1];
        gintZ2[k1] = gintZ2[k2];
        gintZ2[k2] = iw;
    }//koukan

    public double d(double d1,double d2,double d3,double d4){
        double dw;
        dw=Math.pow(Math.pow(d3-d1,2.0)+Math.pow(d4-d2,2.0),0.5);
        return dw;
    }


    double dis_k(int i1,int i2){
        double d;
        d=jou(jou(x1[i1]-x1[i2],2.0)+jou(y1[i1]-y1[i2],2.0),0.5);
        return d;
    }//dis_k

    long kaijo(int n){
        long kai;
        int i;
        kai=1;
        for(i=2;i<n;i++){
            kai=kai*i;
        }
        kai=kai/2;
        return kai;
    }//dis_k


    public double dou(String dous){
        double dou1;
        dou1 = (Double.valueOf(dous)).doubleValue();
        return dou1;
    }
    public double rand(){
        double rand1;
        rand1=Math.random();
        return rand1;
    }
    public void init(){
        col1=Color.black;
        col2=Color.yellow;
        cl[0]=new Color(10,199,11);
        cl[1]=Color.green;
        cl[2]=new Color(199,111,238);
        cl[3]=new Color(199,199,0);
        cl[4]=Color.white;
        takaS=getParameter("takap");
        habaS=getParameter("habap");
        NS=getParameter("Np");
        habad=dou(habaS);
        takad=dou(takaS);
        Nd=dou(NS);
        if(Nd==20){
            Nd=3+47*rand();
        }
        haba=(int)habad;
        taka=(int)takad;
        N=(int)Nd;
    }
    double x1[]=new double[100];
    double y1[]=new double[100];
    double w1[]=new double[100];

    double x2[]=new double[10000];
    double y2[]=new double[10000];
    double w2[]=new double[10000];

    int dpath[][]=new int[100][100];
    double ddd[][]=new double[100][100];
    double dorder[]=new double[10000];
    double dordersum[]=new double[10000];
    int numdordersum;

    int x[]=new int[10000];
    int y[]=new int[10000];
    double s[]=new double[10000];
    String sss[]=new String[100];
    double dnow[]=new double[10000];
    double dnowdela[]=new double[10000];


    String sKumi[]=new String[1000000];

    void heapv(double te1[],double te2[],double te3[],int NN){
        int kk,kks,ii,jj,mm;
        double b1,b2,b3,c1,c2,c3;
        kks=(int)(NN/2);
        for(kk=kks;kk>=1;kk--){
            ii=kk;
            b1=te1[ii-1];b2=te2[ii-1];b3=te3[ii-1];
            while(2*ii<=NN){
                jj=2*ii;
                if(jj+1<=NN){
                    if(te1[jj-1]<te1[jj]){
                        jj++;
                    }
                }
                if(te1[jj-1]<=b1){
                    break;
                }
                te1[ii-1]=te1[jj-1];te2[ii-1]=te2[jj-1];te3[ii-1]=te3[jj-1];
                ii=jj;
            }//wend
            te1[ii-1]=b1;te2[ii-1]=b2;te3[ii-1]=b3;
        }//next kk
        for(mm=NN-1;mm>=1;mm--){
            c1=te1[mm];c2=te2[mm];c3=te3[mm];
            te1[mm]=te1[0];te2[mm]=te2[0];te3[mm]=te3[0];
            ii=1;
            while(2*ii<=mm){
                kk=2*ii;
                if(kk+1<=mm){
                    if(te1[kk-1]<=te1[kk]){
                        kk++;
                    }
                }
                if(te1[kk-1]<=c1){
                    break;
                }
                te1[ii-1]=te1[kk-1];te2[ii-1]=te2[kk-1];te3[ii-1]=te3[kk-1];
                ii=kk;
            }//wend
            te1[ii-1]=c1;te2[ii-1]=c2;te3[ii-1]=c3;
        }//next mm
    }//heapv


    public int majiwaru(double mx1,double my1,double mx2,double my2,double mx3,double my3,double mx4,double my4,java.awt.Graphics ag){
        int majiwaruint;
        majiwaruint=0;
        double slp1;
        double itc1;
        double slp2;
        double itc2;
        double itsx;
        slp1=(my1-my2)/(mx1-mx2);
        itc1=my1-slp1*mx1;
        slp2=(my3-my4)/(mx3-mx4);
        itc2=my3-slp2*mx3;
        itsx=(itc2-itc1)/(slp1-slp2);
        if((itsx-mx3)*(itsx-mx4)<0 && (itsx-mx1)*(itsx-mx2)<0){
            majiwaruint=1;
        }
        return majiwaruint;
    }//majiwaru


    void tsploop(int con,int idim[],java.awt.Graphics ag){
        int iindex;
        int intk;
        double dblD;
        int intflag;

        iindex=con;
        if(iindex<N){
            for(idim[iindex]=1;idim[iindex]<N;idim[iindex]++){
                intflag=0;
                for(intk=0;intk<iindex;intk++){
                    if(idim[intk]==idim[iindex]){
                        intflag=1;
                    }
                }//intk
                if(intflag==0){
                    int majilabel;
                    majilabel=0;
                    if(iindex>3){
                        for(intk=0;intk<iindex-2;intk++){
                            if(majiwaru(x1[idim[intk]],y1[idim[intk]],x1[idim[intk+1]],y1[idim[intk+1]],x1[idim[iindex-1]],y1[idim[iindex-1]],x1[idim[iindex]],y1[idim[iindex]],ag)==1){
                                majilabel=1;
                                break;
                            }
                        }//intk
                    }
                    if(majilabel==0){
                        tsploop(iindex+1,idim,ag);
                    }
                }
            }//idim[] iindex=1
        }//iindex<N
        else{//iindex==N


            int intsflag;
            String sTmp;
            String sTmp2;

            dblD=0.0;
            for(intk=0;intk<N-1;intk++){
                dblD=dblD+dis_k(idim[intk],idim[intk+1]);
            }//intk
            dblD=dblD+dis_k(idim[N-1],idim[0]);

            if(dblD<dblMinD){
                dblMinD=dblD;
                for(intk=0;intk<N;intk++){
                    intmindim[intk]=idim[intk];
                }//intk
            }

            longKumiNum++;
        }//iindex==N
    }//tsploop


    void tsploop_dcomp(int con,int idim[],java.awt.Graphics ag){
        int iindex;
        int intk;
        double dblD;
        int intflag;

        iindex=con;
        if(iindex<N){
            for(idim[iindex]=1;idim[iindex]<N;idim[iindex]++){
                intflag=0;
                for(intk=0;intk<iindex;intk++){
                    if(idim[intk]==idim[iindex]){
                        intflag=1;
                        break;
                    }
                }//intk
                if(intflag==0){
                    dnow[iindex]=dnow[iindex-1]+ddd[idim[iindex-1]][idim[iindex]];
                    if(dnow[iindex]>dblMinD-dordersum[N-1-iindex]){
                        intflag=1;
                    }
                }
                if(intflag==0){
                    int majilabel;
                    majilabel=0;
                    if(iindex>3){
                        for(intk=0;intk<iindex-2;intk++){
                            if(majiwaru(x1[idim[intk]],y1[idim[intk]],x1[idim[intk+1]],y1[idim[intk+1]],x1[idim[iindex-1]],y1[idim[iindex-1]],x1[idim[iindex]],y1[idim[iindex]],ag)==1){
                                majilabel=1;
                                break;
                            }
                        }//intk
                    }
                    if(majilabel==0){
                        lngCnt=lngCnt+1;
                        tsploop_dcomp(iindex+1,idim,ag);
                    }
                }//intflag==0
            }//idim[] iindex=1
        }//iindex<N
        else{//iindex==N


            int intsflag;
            String sTmp;
            String sTmp2;

            dnow[iindex]=dnow[iindex-1]+ddd[idim[iindex-1]][idim[0]];

            if(dnow[iindex]<dblMinD){
                dblMinD=dnow[iindex];
                for(intk=0;intk<N;intk++){
                    intmindim[intk]=idim[intk];
                }//intk
            }

            longKumiNum++;
        }//iindex==N
    }//tsploop_dcomp


    void tsploopdela(int con,int idim[],java.awt.Graphics ag){
        int iindex;
        int intk;
        double dblD;
        int intflag;

        iindex=con;
        if(iindex<N){
            for(idim[iindex]=1;idim[iindex]<N;idim[iindex]++){
                intflag=0;
                if(dpath[idim[iindex-1]][idim[iindex]]!=1){
                    intflag=1;
                }else{
                    for(intk=0;intk<iindex;intk++){
                        if(idim[intk]==idim[iindex]){
                            intflag=1;
                            break;
                        }
                    }//intk
                }
                if(intflag==0){
                    dnowdela[iindex]=dnowdela[iindex-1]+ddd[idim[iindex-1]][idim[iindex]];
                    if(dnowdela[iindex]>dblMinD-dordersum[N-1-iindex]){
                        intflag=1;
                    }
                }
                if(intflag==0 && dpath[idim[iindex-1]][idim[iindex]]==1){
                    int majilabel;
                    majilabel=0;
                    if(iindex>3){
                        for(intk=0;intk<iindex-2;intk++){
                            if(majiwaru(x1[idim[intk]],y1[idim[intk]],x1[idim[intk+1]],y1[idim[intk+1]],x1[idim[iindex-1]],y1[idim[iindex-1]],x1[idim[iindex]],y1[idim[iindex]],ag)==1){
                                majilabel=1;
                                break;
                            }
                        }//intk
                    }
                    if(majilabel==0){
                        lngCntDela=lngCntDela+1;
                        tsploopdela(iindex+1,idim,ag);
                    }
                }
            }//idim[] iindex=1
        }//iindex<N
        else{//iindex==N


            int intsflag;
            String sTmp;
            String sTmp2;

            dnowdela[iindex]=dnowdela[iindex-1]+ddd[idim[iindex-1]][idim[0]];

            if(dnowdela[iindex]<dblMinD){
                dblMinD=dnowdela[iindex];
                for(intk=0;intk<N;intk++){
                    intmindim[intk]=idim[intk];
                }//intk
            }

            longKumiNum++;
        }//iindex==N
    }//tspdela


    void tsploop_bk(int con,int idim[],java.awt.Graphics ag){
        int iindex;
        int intk;
        double dblD;
        int intflag;

        iindex=con;
        if(iindex<N){
            for(idim[iindex]=1;idim[iindex]<N;idim[iindex]++){
                intflag=0;
                for(intk=0;intk<iindex;intk++){
                    if(idim[intk]==idim[iindex]){
                        intflag=1;
                    }
                }//intk
                if(intflag==0){
                    tsploop(iindex+1,idim,ag);
                }
            }//idim[] iindex=1
        }//iindex<N
        else{//iindex==N


            int intsflag;
            String sTmp;
            String sTmp2;

            dblD=0.0;
            for(intk=0;intk<N-1;intk++){
                dblD=dblD+dis_k(idim[intk],idim[intk+1]);
            }//intk
            dblD=dblD+dis_k(idim[N-1],idim[0]);

            if(dblD<dblMinD){
                dblMinD=dblD;
                for(intk=0;intk<N;intk++){
                    intmindim[intk]=idim[intk];
                }//intk
            }

            longKumiNum++;
        }//iindex==N
    }//tsploop_bk



    public void paint(java.awt.Graphics g){//main
        int intCoN;
        taka=350;
        haba=500;
        taka2=taka;
        haba2=haba;
        taka=taka2*40;
        haba=haba2*40;
        g.setColor(col1);
        g.fillRect(1,1,haba,taka);
        g.setColor(cl[1]);
        Point old,current;
        N=5+(int)(rand()*9.0);

        for(k=0;k<N;k++){
            x1[k]=80.0+rand()*(haba2-100.0);
            y1[k]=80.0+rand()*(taka2-100.0);
            x[k]=(int)(x1[k]);
            y[k]=(int)(y1[k]);
            s[k]=jou(x1[k]*x1[k]+y1[k]*y1[k],0.5);
        }


debugnum=0;

        kaiNum=kaijo(N);

        g.setColor(Color.cyan);

        for(k=0;k<N;k++){
            x2[k]=x1[k];
            y2[k]=y1[k];
            g.fillOval((int)x2[k]-3,(int)y2[k]-3,6,6);
            g.drawString(""+k,(int)x2[k]-3,(int)y2[k]-5);
        }

//inc
        g.setColor(col1);
        g.fillRect(50,1,300,18);


        g.setColor(Color.white);
        if(N>1){
            g.drawString("Now, TSP Inc ver. computing. Please Wait.",50,15);
        }else{
            g.drawString("Please click in this applet.",50,15);
        }
        for(k=0;k<N;k++){
            gdblX1[k] = x1[k];
            gdblY1[k] = y1[k];
        }//Next k

        gintZMin[0] = 0;
        gintZMin[1] = 1;
        gintZMin[2] = 2;
        for(k=3;k<N;k++){
            gintZMin[k] = k;
            dblMinD = 0.0;
            for(i=0;i<=k;i++){
                gintZ2[i] = gintZMin[i];
                if(i>0){
                    xx1 = gdblX1[gintZMin[i - 1]];
                    yy1 = gdblY1[gintZMin[i - 1]];
                    xx2 = gdblX1[gintZMin[i]];
                    yy2 = gdblY1[gintZMin[i]];
                }else{
                    xx1 = gdblX1[gintZMin[0]];
                    yy1 = gdblY1[gintZMin[0]];
                    xx2 = gdblX1[gintZMin[k]];
                    yy2 = gdblY1[gintZMin[k]];
                }//i > 0
                dblMinD = dblMinD + d(xx1,yy1,xx2,yy2);
            }//next i
            for(i=0;i<k;i++){
                if(i==0){
                    koukan(k, 0);
                }else{
                    koukan(i - 1, i);
                }//i==0



                dblDD = 0.0;
                for( l = 0;l<=k;l++){
                    if(l>0){
                        xx1 = gdblX1[gintZ2[l - 1]];
                        yy1 = gdblY1[gintZ2[l - 1]];
                        xx2 = gdblX1[gintZ2[l]];
                        yy2 = gdblY1[gintZ2[l]];
                    }else{
                        xx1 = gdblX1[gintZ2[k]];
                        yy1 = gdblY1[gintZ2[k]];
                        xx2 = gdblX1[gintZ2[0]];
                        yy2 = gdblY1[gintZ2[0]];
                    }//l>0
                    dblDD = dblDD + d(xx1,yy1,xx2,yy2);
                }//Next l

                if(dblDD < dblMinD || k==N){
                    for(l=0;l<=k;l++){
                        gintZMin[l] = gintZ2[l];
                    }//Next l
                    dblMinD = dblDD;
                }//dblDD < dblMinD


            }//Next i
        }//next k



        for(k=0;k<N;k++){
            x1[k]=x2[k];
            y1[k]=y2[k];
        }

        for(k=0;k<N;k++){
            x1[k]=x2[k]+haba2*20;
            y1[k]=y2[k]+taka2*20;
        }

        if(N>1){
            g.drawString("Now, computing. Please Wait.",50,15);
        }else{
            g.drawString("Please click in this applet.",50,15);
        }

        numdordersum=0;

        g.setColor(col1);
        g.fillRect(50,1,300,18);


        g.setColor(Color.white);
        if(N>1){
            g.drawString("Now, Drawing Delaunay triangulation. Please Wait.",50,15);
        }else{
            g.drawString("Please click in this applet.",50,15);
        }

        for(i=1;i<=N-1;i++){
            dpath[i-1][i-1]=0;
            ddd[i-1][i-1]=0.0;
            for(j=i+1;j<=N;j++){
                dpath[i-1][j-1]=0;
                dpath[j-1][i-1]=0;
                ddd[j-1][i-1]=dis_k(j-1,i-1);
                ddd[i-1][j-1]=ddd[j-1][i-1];
                dorder[numdordersum]=ddd[i-1][j-1];
                numdordersum=numdordersum+1;

                di2=(y1[i-1]-y1[j-1])/(x1[i-1]-x1[j-1]);
                di=-1/di2;
                cp2=(y1[i-1]+y1[j-1])/2;
                cpx=(x1[i-1]+x1[j-1])/2;
                ys=cp2-cpx*di;
                t=jou(x1[i-1]-x1[j-1],2)+jou(y1[i-1]-y1[j-1],2);
                if(ys>0 && ys<taka){
                    x0=0;y0=ys;
                }
                else{
                    if(di>0){
                        x0=-ys/di;y0=0;
                    }
                    else{
                        x0=(taka-ys)/di;
                        y0=taka;
                    }
                }
                yy=di*haba+ys;
                if(yy>0 && yy<taka){
                    xa1=haba;ya1=yy;
                }
                else{
                    if(di>0){
                        xa1=(taka-ys)/di;ya1=taka;
                    }
                    else{
                        xa1=-ys/di;
                        ya1=0;
                    }
                }
                l=1;
                kx[l-1]=x0;ky[l-1]=y0;
                for(k=1;k<=N;k++){
                    if(k!=i && k!=j){
                        di4=(y1[i-1]-y1[k-1])/(x1[i-1]-x1[k-1]);
                        di3=-1/di4;
                        cp3=(y1[i-1]+y1[k-1])/2;
                        cpx3=(x1[i-1]+x1[k-1])/2;
                        ys3=cp3-cpx3*di3;
                        t2=jou(x1[i-1]-x1[k-1],2)+jou(y1[i-1]-y1[k-1],2);
                        y20=di3*x0+ys3;
                        y21=di3*xa1+ys3;
                        sa0=y0-y20;
                        sa1=ya1-y21;
                        if(sa0*sa1<0){
                            l++;
                            kx[l-1]=(ys3-ys)/(di-di3);
                            ky[l-1]=di*kx[l-1]+ys;
                        }//if sa0*sa1<0
                    }//if(k!=i && k!=j)
                }//next k
                l++;
                kx[l-1]=xa1;
                ky[l-1]=ya1;
                for(u=1;u<=l;u++){
                    kz[u-1]=0;
                }
                heapv(kx,ky,kz,l);
                for(k=1;k<=l-1;k++){
                    k2=k+1;
                    xx=(kx[k-1]+kx[k2-1])/2;
                    yy2=di*xx+ys;
                    ds=jou(xx-x1[i-1],2)+jou(yy2-y1[i-1],2);
                    br2=0;
                    for(u=1;u<=N;u++){
                        if(u!=i && u!=j){
                            us=jou(xx-x1[u-1],2)+jou(yy2-y1[u-1],2);
                            if(us<ds){
                                br2=br2+1;
                            }
                        }
                    }//next u
                    if(br2<=2){
                        xz=(int)(kx[k-1]+0.5);
                        xz2=(int)(kx[k2-1]+0.5);
                        yz=(int)(ky[k-1]+0.5);
                        yz2=(int)(ky[k2-1]+0.5);
                        if(br2==0){
                            g.setColor(new Color(0,0,80));
                        }
                        if(br2==1){
                            g.setColor(new Color(0,40,40));
                        }
                        if(br2==2){
                            g.setColor(new Color(0,0,40));
                        }
                        g.drawLine(xz-haba2*20,yz-taka2*20,xz2-haba2*20,yz2-taka2*20);
                        g.setColor(new Color(80,0,0));
                        g.drawLine((int)x1[i-1]-haba2*20,(int)y1[i-1]-taka2*20,(int)x1[j-1]-haba2*20,(int)y1[j-1]-taka2*20);
                        dpath[i-1][j-1]=1;
                        dpath[j-1][i-1]=1;
                    }//if br2<3
                }//next k
            }//next j
        }//next i

        for(k=0;k<N;k++){
            x1[k]=x1[k]-haba2*20;
            y1[k]=y1[k]-taka2*20;
        }



        g.setColor(new Color(0,255,255));
        dblMinD=0.0;
        for( l = 0;l<N;l++){
            g.drawString(""+gintZMin[l],5,l*12+90);
            if( l > 0){
                g.drawLine((int)gdblX1[gintZMin[l]], (int)gdblY1[gintZMin[l]],(int)gdblX1[gintZMin[l - 1]], (int)gdblY1[gintZMin[l - 1]]);
                dblMinD=dblMinD+dis_k(gintZMin[l],gintZMin[l-1]);
            }//l > 0
        }//Next l
        g.drawString(""+gintZMin[0],5,N*12+90);
        g.drawLine((int)gdblX1[gintZMin[N-1]], (int)gdblY1[gintZMin[N-1]],(int)gdblX1[gintZMin[0]], (int)gdblY1[gintZMin[0]]);
         dblMinD=dblMinD+dis_k(gintZMin[N-1],gintZMin[0]);

        for(intk=0;intk<N;intk++){
            intmindim[intk]=gintZMin[intk];
        }//intk

        g.drawString("TSP_Inc_d="+dblMinD,15,60);

//inc end



        g.setColor(col1);
        g.fillRect(50,1,300,18);
        g.setColor(Color.white);
        if(N>1){
            g.drawString("Now, Delaunay ver. computing. Please Wait.",50,15);
        }else{
            g.drawString("Please click in this applet.",50,15);
        }

        heapv(dorder,kz,kz,numdordersum);
        dordersum[0]=dorder[0];
        for(k=1;k<numdordersum;k++){
            dordersum[k]=dordersum[k-1]+dorder[k];
        }

        g.setColor(Color.white);

        g.drawLine(380,65,480,65);
        g.drawLine(380,60,380,65);
        g.drawLine(480,60,480,65);
        g.drawString("0",380,60);
        g.drawString("100",480,60);

        g.drawString("N="+N,15,15);



        lngCnt=0;
        lngCntDela=0;

        longKumiNum=0;

//        dblMinD=99999999999.9;
//        dblMinD=dblMinD*1.10;



        idim[0]=0;
        for(idim[1]=1;idim[1]<N;idim[1]++){
            dnowdela[1]=ddd[idim[0]][idim[1]];
            lngCntDela=lngCntDela+1;
            tsploopdela(2,idim,g);
            g.setColor(col1);
            g.fillRect(310,1,190,15);
            g.fillRect(310,31,190,15);

            g.setColor(Color.white);
            g.drawString((idim[1]+1)+"/"+N,310,15);
            g.setColor(Color.green);
            g.drawString(longKumiNum+"/"+kaiNum*2+" "+lngCntDela,310,45);
        }//idim[0]

        g.setColor(Color.green);
        for(intk=0;intk<N-1;intk++){
            g.drawString(""+intmindim[intk],25,intk*12+90);
            g.drawLine((int)x1[intmindim[intk]],(int)y1[intmindim[intk]],(int)x1[intmindim[intk+1]],(int)y1[intmindim[intk+1]]);
        }
        g.drawString(""+intmindim[N-1],25,(N-1)*12+90);
        g.drawString(""+intmindim[0],25,N*12+90);
        g.drawLine((int)x1[intmindim[N-1]],(int)y1[intmindim[N-1]],(int)x1[intmindim[0]],(int)y1[intmindim[0]]);

        g.drawString("TSP_Del_d="+dblMinD,15,45);






        g.setColor(col1);
        g.fillRect(50,1,300,18);

        g.setColor(Color.white);
        if(N>1){
            g.drawString("Now, TSP computing. Please Wait.",50,15);
        }else{
            g.drawString("Please click in this applet.",50,15);
        }


        longKumiNum=0;


        idim[0]=0;
        for(idim[1]=1;idim[1]<N;idim[1]++){
            dnow[1]=ddd[idim[0]][idim[1]];
            lngCnt=lngCnt+1;
            tsploop_dcomp(2,idim,g);
            g.setColor(col1);
            g.fillRect(310,1,190,30);

            g.setColor(Color.white);
            g.drawString((idim[1]+1)+"/"+N,310,15);
            g.setColor(Color.pink);
            g.drawString(longKumiNum+"/"+kaiNum*2+" "+lngCnt,310,30);
        }//idim[0]

        g.setColor(Color.pink);
        for(intk=0;intk<N-1;intk++){
            g.drawString(""+intmindim[intk],45,intk*12+90);
            g.drawLine((int)x1[intmindim[intk]],(int)y1[intmindim[intk]],(int)x1[intmindim[intk+1]],(int)y1[intmindim[intk+1]]);
        }
        g.drawString(""+intmindim[N-1],45,(N-1)*12+90);
        g.drawString(""+intmindim[0],45,N*12+90);
        g.drawLine((int)x1[intmindim[N-1]],(int)y1[intmindim[N-1]],(int)x1[intmindim[0]],(int)y1[intmindim[0]]);

        g.drawString("route_num="+longKumiNum/2,190,30);
        g.drawString("    TSP_d="+dblMinD,15,30);

        g.setColor(col1);
        g.fillRect(50,1,300,18);

        g.setColor(Color.white);
        g.setColor(cl[4]);
        g.drawString("Completed.",50,15);


    }//main

}

