附上的图片是我现在的位置。蓝点=点/城市,黑色 x 代表每个包含至少一个城市的方框中的中心点,粉色点代表这些中心点的中点
我正在使用 Lab Windows 做一个简短的项目来近似 2D 平面上的点之间的最小路径。(仅以图形方式,我不需要实际的路径长度)
为此,我正在使用真实空间重新归一化。
http://scitation.aip.org/docserver/fulltext/aip/journal/cip/10/6/1.168588.pdf?expires=1387106816&id=id&accname=guest&checksum=350319AE8AA74E9002D87940052A0140 - U. Yoshiyuki 的文章 - “解决旅行推销员统计物理方法的问题”准确描述了我正在尝试做的事情
到目前为止,我已经:在我的用户界面中的图表上绘制了随机整数值点
将我的绘图空间均匀地划分为框,即 2x2 图形(仅通过绘制线条)
如果在该框中生成了一个随机点,则在每个框的中心创建一个新点
找到最近的边缘点(仅适用于 2x2 图)
/*
* Travelling Salesman Problem
* A Graphical Approximation using Space Re-normalization
* Assuming there are 3 or more cities
*/
#include "toolbox.h"
#include <cvirte.h>
#include <userint.h>
#include "TSP.h"
static int panelHandle;
void draw_borders(int,int,int,int);/*function prototype*/
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "TSP.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK Quit (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK ClearPlot (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
DeleteGraphPlot(panelHandle,PANEL_2X2GRAPH,-1,1);
DeleteGraphPlot(panelHandle,PANEL_4X4GRAPH,-1,1);
DeleteGraphPlot(panelHandle,PANEL_8X8GRAPH,-1,1);
DeleteGraphPlot(panelHandle,PANEL_16X16GRAPH,-1,1);
DeleteGraphPlot(panelHandle,PANEL_GRAPH_PATH,-1,1);
break;
}
return 0;
}
int CVICALLBACK Go (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
int x[1024],y[1024]; /* City co-ordinates */
int i,j,k,num=10; /* num is the number of cities to be plotted */
int xi=0,xf=1024,yi=0,yf=1024; /* boundary points om graph */
int flag=0;
/* Structures to store central points for each box containing a city*/
typedef struct{
int x,y;
} Segment1;
Segment1 Seg1[100][100];
typedef struct{
int x,y;
} Segment2;
Segment2 Seg2[100][100];
typedef struct{
int x,y;
} Segment3;
Segment3 Seg3[100][100];
typedef struct{
int x,y;
} Segment4;
Segment4 Seg4[100][100];
/*2x2*/
int quad1[2][2]; /*count for cities*/
int grid1x2d[2][2],grid1y2d[2][2];/*grid containing x and y coordinate of central point locations in each box which contains a city*/
int grid1xx[4], grid1yy[4];/*same grid stretched to 1d for plotting*/
int mid1x2d, mid1y2d;
/*4x4*/
int quad2[4][4];
int grid2x2d[4][4],grid2y2d[4][4];
int grid2xx[16], grid2yy[16];
/*8x8*/
int quad3[8][8];
int grid3x2d[8][8],grid3y2d[8][8];
int grid3xx[64], grid3yy[64];
/*16x16*/
int quad4[16][16];
int grid4x2d[16][16],grid4y2d[16][16];
int grid4xx[256], grid4yy[256];
draw_borders(xi,xf,yi,yf);/*Draw borders for clarity*/
/* Plot Cities */
for(i=0;i<num;i++){
/*represent each city as a random point*/
x[i] = (int)Random(0,1024);
y[i] = (int)Random(0,1024);
PlotPoint(panelHandle,PANEL_2X2GRAPH,x[i],y[i],VAL_CROSS,VAL_BLUE); /*plot city on each graph*/
PlotPoint(panelHandle,PANEL_4X4GRAPH,x[i],y[i],VAL_CROSS,VAL_BLUE);
PlotPoint(panelHandle,PANEL_8X8GRAPH,x[i],y[i],VAL_CROSS,VAL_BLUE);
PlotPoint(panelHandle,PANEL_16X16GRAPH,x[i],y[i],VAL_CROSS,VAL_BLUE);
PlotPoint(panelHandle,PANEL_GRAPH_PATH,x[i],y[i],VAL_CROSS,VAL_BLUE);
/*Print out city coordinates*/
char resultx[100];
sprintf(resultx,"x co-ordinate of city %d is %d\n",i+1,x[i]);
SetCtrlVal(panelHandle,PANEL_CITYCOORDINATES,resultx);
char resulty[100];
sprintf(resulty,"y co-ordinate of city %d is %d\n",i+1,y[i]);
SetCtrlVal(panelHandle,PANEL_CITYCOORDINATES,resulty);
}
SetCtrlVal(panelHandle,PANEL_MESSAGE,"Cities Plotted");
////////////*2x2 Graph*////////////////////////////////////////////////////////////////////////////
/* First find centre point of each box which contains a city
* Second find midpoint of centre point locations of each box that contains at least one city
*/
/* Set count in all 4 boxes to be zero*/
for (i=0;i<2;i++){ /*x direction*/
for (j=0; j<2; j++) /*y direction*/
quad1[i][j]=0;
}
/* For every city, add 1 to count */
for (i=0;i<num;i++)
quad1[x[i]/512][y[i]/512]++;
/* Set up a grid containing the x,y coordinates of central point locations of each box that contains at least one city*/
for (i=0;i<2;i++){
for (j=0; j<2; j++){
if (quad1[i][j]>0){
grid1x2d[i][j]=i*512+256; grid1y2d[i][j] =j*512+256;
/* Assign these values to a structure to call on them later when finding midpoint*/
Seg1[i][j].x = grid1x2d[i][j]; Seg1[i][j].y = grid1y2d[i][j];
}
else{
/* Set up a grid containing dummy x,y coordinates if there are no cities in a particular box */
grid1x2d[i][j]=-1; grid1y2d[i][j] =-1;
Seg1[i][j].x = grid1x2d[i][j]; Seg1[i][j].y = grid1y2d[i][j];
}
}
}
/* Find edge points which are found if representative points are connected*/
/* If the 2X2 Graph has an empty box then there will be an edgepoint in centre of graph*/
for(i=0;i<2;i++){
for(j=0;j<2;j++){
if (quad1[i][j]<=0){
PlotPoint(panelHandle,PANEL_2X2GRAPH,512,512,VAL_BOLD_X,VAL_DK_GREEN);
PlotPoint(panelHandle,PANEL_4X4GRAPH,512,512,VAL_BOLD_X,VAL_MAGENTA);
PlotPoint(panelHandle,PANEL_8X8GRAPH,512,512,VAL_BOLD_X,VAL_MAGENTA);
PlotPoint(panelHandle,PANEL_16X16GRAPH,512,512,VAL_BOLD_X,VAL_MAGENTA);
}
}
}
for(i=0;i<2;i++){
j=0;
if( quad1[i][j]>0 && quad1[i][j+1]>0){
mid1x2d= (Seg1[i][j].x + Seg1[i][j+1].x) /2 ;
mid1y2d= (Seg1[i][j].y + Seg1[i][j+1].y) /2 ;
PlotPoint(panelHandle,PANEL_2X2GRAPH,mid1x2d,mid1y2d,VAL_BOLD_X,VAL_DK_GREEN);
PlotPoint(panelHandle,PANEL_4X4GRAPH,mid1x2d,mid1y2d,VAL_BOLD_X,VAL_MAGENTA);
PlotPoint(panelHandle,PANEL_8X8GRAPH,mid1x2d,mid1y2d,VAL_BOLD_X,VAL_MAGENTA);
PlotPoint(panelHandle,PANEL_16X16GRAPH,mid1x2d,mid1y2d,VAL_BOLD_X,VAL_MAGENTA);
}
}
for(j=0;j<2;j++){
i=0;
if( quad1[i][j]>0 && quad1[i+1][j]>0){
mid1x2d= (Seg1[i][j].x + Seg1[i+1][j].x) /2 ;
mid1y2d= (Seg1[i][j].y + Seg1[i+1][j].y) /2 ;
PlotPoint(panelHandle,PANEL_2X2GRAPH,mid1x2d,mid1y2d,VAL_BOLD_X,VAL_DK_GREEN);
PlotPoint(panelHandle,PANEL_4X4GRAPH,mid1x2d,mid1y2d,VAL_BOLD_X,VAL_MAGENTA);
PlotPoint(panelHandle,PANEL_8X8GRAPH,mid1x2d,mid1y2d,VAL_BOLD_X,VAL_MAGENTA);
PlotPoint(panelHandle,PANEL_16X16GRAPH,mid1x2d,mid1y2d,VAL_BOLD_X,VAL_MAGENTA);
}
}
/*stretch into 1d array for plotting*/
for (k=0;k<4;k++){
grid1xx[k]=grid1x2d[k%2][(int)k/2];
}
for (k=0;k<4;k++){
grid1yy[k]=grid1y2d[k%2][(int)k/2];
}
PlotXY (panelHandle, PANEL_2X2GRAPH, grid1xx , grid1yy ,4, VAL_INTEGER, VAL_INTEGER, VAL_SCATTER,VAL_BOLD_X, VAL_THIN_LINE, 1, VAL_BLACK);
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////*Optimal Paths*////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////*4x4 Graph*////////////////////////////////////////////////////////////////////////////
/* Set count in all 4 boxes to be zero*/
for (i=0;i<4;i++){ /*x direction*/
for (j=0; j<4; j++) /*y direction*/
quad2[i][j]=0;
}
/* For every city, add 1 to count */
for (i=0;i<num;i++)
quad2[x[i]/256][y[i]/256]++;
/* Set up a grid containing the x,y coordinates of central point locations of each box that contains at least one city*/
for (i=0;i<4;i++){
for (j=0; j<4; j++){
if (quad2[i][j]>0){
grid2x2d[i][j]=i*256+128; grid2y2d[i][j] =j*256+128;
/* Assign these values to a structure to call on them later when finding midpoint*/
Seg2[i][j].x = grid2x2d[i][j]; Seg2[i][j].y = grid2y2d[i][j];
}
else{
/* Set up a grid containing dummy x,y coordinates if there are no cities in a particular box */
grid2x2d[i][j]=-1; grid2y2d[i][j] =-1;
Seg2[i][j].x = grid2x2d[i][j]; Seg2[i][j].y = grid2y2d[i][j];
}
}
}
/*stretch into 1d array for plotting*/
for (k=0;k<16;k++)
grid2xx[k]=grid2x2d[k%4][(int)k/4];
for (k=0;k<16;k++)
grid2yy[k]=grid2y2d[k%4][(int)k/4];
PlotXY (panelHandle, PANEL_4X4GRAPH, grid2xx , grid2yy ,16, VAL_INTEGER, VAL_INTEGER, VAL_SCATTER, VAL_BOLD_X, VAL_THIN_LINE, 1, VAL_BLACK);
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////*8x8 Graph*////////////////////////////////////////////////////////////////////////////
/* Set count in all 4 boxes to be zero*/
for (i=0;i<8;i++){ /*x direction*/
for (j=0; j<8; j++) /*y direction*/
quad3[i][j]=0;
}
/* For every city, add 1 to count */
for (i=0;i<num;i++)
quad3[x[i]/128][y[i]/128]++;
/* Set up a grid containing the x,y coordinates of central point locations of each box that contains at least one city*/
for (i=0;i<8;i++){
for (j=0; j<8; j++){
if (quad3[i][j]>0){
grid3x2d[i][j]=i*128+64; grid3y2d[i][j] =j*128+64;
/* Assign these values to a structure to call on them later when finding midpoint*/
Seg3[i][j].x = grid3x2d[i][j]; Seg3[i][j].y = grid3y2d[i][j];
}
else{
/* Set up a grid containing dummy x,y coordinates if there are no cities in a particular box */
grid3x2d[i][j]=-1; grid3y2d[i][j] =-1;
Seg3[i][j].x = grid3x2d[i][j]; Seg3[i][j].y = grid3y2d[i][j];
}
}
}
/*stretch into 1d array for plotting*/
for (k=0;k<64;k++)
grid3xx[k]=grid3x2d[k%8][(int)k/8];
for (k=0;k<64;k++)
grid3yy[k]=grid3y2d[k%8][(int)k/8];
PlotXY (panelHandle, PANEL_8X8GRAPH, grid3xx , grid3yy ,64, VAL_INTEGER, VAL_INTEGER, VAL_SCATTER, VAL_BOLD_X, VAL_THIN_LINE, 1, VAL_BLACK);
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////*16x16 Graph*////////////////////////////////////////////////////////////////////////////
/* Set count in all 4 boxes to be zero*/
for (i=0;i<16;i++){ /*x direction*/
for (j=0; j<16; j++) /*y direction*/
quad4[i][j]=0;
}
/* For every city, add 1 to count */
for (i=0;i<num;i++)
quad4[x[i]/64][y[i]/64]++;
/* Set up a grid containing the x,y coordinates of central point locations of each box that contains at least one city*/
for (i=0;i<16;i++){
for (j=0; j<16; j++){
if (quad4[i][j]>0){
grid4x2d[i][j]=i*64+32; grid4y2d[i][j] =j*64+32;
/* Assign these values to a structure to call on them later when finding midpoint*/
Seg4[i][j].x = grid4x2d[i][j]; Seg4[i][j].y = grid4y2d[i][j];
}
else{
/* Set up a grid containing dummy x,y coordinates if there are no cities in a particular box */
grid4x2d[i][j]=-1; grid4y2d[i][j] =-1;
Seg4[i][j].x = grid4x2d[i][j]; Seg4[i][j].y = grid4y2d[i][j];
}
}
}
/*stretch into 1d array for plotting*/
for (k=0;k<256;k++)
grid4xx[k]=grid4x2d[k%16][(int)k/16];
for (k=0;k<256;k++)
grid4yy[k]=grid4y2d[k%16][(int)k/16];
PlotXY (panelHandle, PANEL_16X16GRAPH, grid4xx , grid4yy ,256, VAL_INTEGER, VAL_INTEGER, VAL_SCATTER,VAL_BOLD_X, VAL_THIN_LINE, 1, VAL_BLACK);
////////////////////////////////////////////////////////////////////////////////////////////////////
break;
}
return 0;
}
void draw_borders(int xi,int xf,int yi,int yf){ /*function definition*/
/*Draw borders for clarity*/
/*2x2*/
PlotLine(panelHandle,PANEL_2X2GRAPH,xi,(yf+yi)/2,xf,(yf+yi)/2,VAL_RED);
PlotLine(panelHandle,PANEL_2X2GRAPH,(xf+xi)/2,yi,(xf+xi)/2,yf,VAL_RED);
/*4x4*/
PlotLine(panelHandle,PANEL_4X4GRAPH,xi,(yf+yi)/2,xf,(yf+yi)/2,VAL_RED);
PlotLine(panelHandle,PANEL_4X4GRAPH,(xf+xi)/2,yi,(xf+xi)/2,yf,VAL_RED);
PlotLine(panelHandle,PANEL_4X4GRAPH,(xi+(xf+xi)/2)/2,yi,(xi+(xf+xi)/2)/2,yf,VAL_RED);
PlotLine(panelHandle,PANEL_4X4GRAPH,(xf+(xf+xi)/2)/2,yi,(xf+(xf+xi)/2)/2,yf,VAL_RED);
PlotLine(panelHandle,PANEL_4X4GRAPH,xi,(yf+(yf+yi)/2)/2,xf,(yf+(yf+yi)/2)/2,VAL_RED);
PlotLine(panelHandle,PANEL_4X4GRAPH,xi,(yi+(yf+yi)/2)/2,xf,(yi+(yf+yi)/2)/2,VAL_RED);
/*8x8*/
PlotLine(panelHandle,PANEL_8X8GRAPH,xi,(yf+yi)/2,xf,(yf+yi)/2,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,(xf+xi)/2,yi,(xf+xi)/2,yf,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,(xi+(xf+xi)/2)/2,yi,(xi+(xf+xi)/2)/2,yf,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,(xf+(xf+xi)/2)/2,yi,(xf+(xf+xi)/2)/2,yf,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,xi,(yf+(yf+yi)/2)/2,xf,(yf+(yf+yi)/2)/2,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,xi,(yi+(yf+yi)/2)/2,xf,(yi+(yf+yi)/2)/2,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,(xi+(xi+(xf+xi)/2)/2)/2,yi,(xi+(xi+(xf+xi)/2)/2)/2,yf,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,(xf+(xi+(xf+xi)/2)/2)/2,yi,(xf+(xi+(xf+xi)/2)/2)/2,yf,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,(xf+(xf+(xf+xi)/2)/2)/2,yi,(xf+(xf+(xf+xi)/2)/2)/2,yf,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,(xi+(xf+(xf+xi)/2)/2)/2,yi,(xi+(xf+(xf+xi)/2)/2)/2,yf,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,xi,(yi+(yi+(yf+yi)/2)/2)/2,xf,(yi+(yi+(yf+yi)/2)/2)/2,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,xi,(yi+(yf+(yf+yi)/2)/2)/2,xf,(yi+(yf+(yf+yi)/2)/2)/2,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,xi,(yf+(yf+(yf+yi)/2)/2)/2,xf,(yf+(yf+(yf+yi)/2)/2)/2,VAL_RED);
PlotLine(panelHandle,PANEL_8X8GRAPH,xi,(yf+(yi+(yf+yi)/2)/2)/2,xf,(yf+(yi+(yf+yi)/2)/2)/2,VAL_RED);
/*16x16*/
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,(yf+yi)/2,xf,(yf+yi)/2,VAL_RED);//y=midline
PlotLine(panelHandle,PANEL_16X16GRAPH,(xf+xi)/2,yi,(xf+xi)/2,yf,VAL_RED);//x=midline
PlotLine(panelHandle,PANEL_16X16GRAPH,(xi+(xf+xi)/2)/2,yi,(xi+(xf+xi)/2)/2,yf,VAL_RED);//x=1/4 line
PlotLine(panelHandle,PANEL_16X16GRAPH,(xf+(xf+xi)/2)/2,yi,(xf+(xf+xi)/2)/2,yf,VAL_RED);//x=3/4 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,(yf+(yf+yi)/2)/2,xf,(yf+(yf+yi)/2)/2,VAL_RED);//y=3/4 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,(yi+(yf+yi)/2)/2,xf,(yi+(yf+yi)/2)/2,VAL_RED);//y=1/4 line
PlotLine(panelHandle,PANEL_16X16GRAPH,(xi+(xi+(xf+xi)/2)/2)/2,yi,(xi+(xi+(xf+xi)/2)/2)/2,yf,VAL_RED);//x=1/8 line
PlotLine(panelHandle,PANEL_16X16GRAPH,(xf+(xi+(xf+xi)/2)/2)/2,yi,(xf+(xi+(xf+xi)/2)/2)/2,yf,VAL_RED);//x=5/8 line
PlotLine(panelHandle,PANEL_16X16GRAPH,(xf+(xf+(xf+xi)/2)/2)/2,yi,(xf+(xf+(xf+xi)/2)/2)/2,yf,VAL_RED);//x=7/8 line
PlotLine(panelHandle,PANEL_16X16GRAPH,(xi+(xf+(xf+xi)/2)/2)/2,yi,(xi+(xf+(xf+xi)/2)/2)/2,yf,VAL_RED);//x=3/8 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,(yi+(yi+(yf+yi)/2)/2)/2,xf,(yi+(yi+(yf+yi)/2)/2)/2,VAL_RED);//y=1/8 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,(yi+(yf+(yf+yi)/2)/2)/2,xf,(yi+(yf+(yf+yi)/2)/2)/2,VAL_RED);//y=3/8 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,(yf+(yf+(yf+yi)/2)/2)/2,xf,(yf+(yf+(yf+yi)/2)/2)/2,VAL_RED);//y=7/8 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,(yf+(yi+(yf+yi)/2)/2)/2,xf,(yf+(yi+(yf+yi)/2)/2)/2,VAL_RED);//y=3/8 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi+((xi+(xi+(xf+xi)/2)/2)/2)/2,yi,xi+((xi+(xi+(xf+xi)/2)/2)/2)/2,yf,VAL_RED);//x=1/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi+((xi+(xf+(xf+xi)/2)/2)/2)/2,yi,xi+((xi+(xf+(xf+xi)/2)/2)/2)/2,yf,VAL_RED);//x=3/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi+((xf+(xi+(xf+xi)/2)/2)/2)/2,yi,xi+((xf+(xi+(xf+xi)/2)/2)/2)/2,yf,VAL_RED);//x=5/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi+((xf+(xf+(xf+xi)/2)/2)/2)/2,yi,xi+((xf+(xf+(xf+xi)/2)/2)/2)/2,yf,VAL_RED);//x=7/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,(xi+xf)/2+((xi+(xi+(xf+xi)/2)/2)/2)/2,yi,(xi+xf)/2+((xi+(xi+(xf+xi)/2)/2)/2)/2,yf,VAL_RED);//x=9/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,(xi+xf)/2+((xi+(xf+(xf+xi)/2)/2)/2)/2,yi,(xi+xf)/2+((xi+(xf+(xf+xi)/2)/2)/2)/2,yf,VAL_RED);//x=11/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,(xi+xf)/2+((xf+(xi+(xf+xi)/2)/2)/2)/2,yi,(xi+xf)/2+((xf+(xi+(xf+xi)/2)/2)/2)/2,yf,VAL_RED);//x=13/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,(xi+xf)/2+((xf+(xf+(xf+xi)/2)/2)/2)/2,yi,(xi+xf)/2+((xf+(xf+(xf+xi)/2)/2)/2)/2,yf,VAL_RED);//x=15/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,yi+((yi+(yi+(yf+yi)/2)/2)/2)/2,xf,yi+((yi+(yi+(yf+yi)/2)/2)/2)/2,VAL_RED);//y=1/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,yi+((yi+(yf+(yf+yi)/2)/2)/2)/2,xf,yi+((yi+(yf+(yf+yi)/2)/2)/2)/2,VAL_RED);//y=3/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,yi+((yf+(yf+(yf+yi)/2)/2)/2)/2,xf,yi+((yf+(yf+(yf+yi)/2)/2)/2)/2,VAL_RED);//y=7/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,yi+((yf+(yi+(yf+yi)/2)/2)/2)/2,xf,yi+((yf+(yi+(yf+yi)/2)/2)/2)/2,VAL_RED);//y=5/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,((yi+yf)/2)+((yf+(yi+(yf+yi)/2)/2)/2)/2,xf,((yi+yf)/2)+((yf+(yi+(yf+yi)/2)/2)/2)/2,VAL_RED);//y=13/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,((yi+yf)/2)+((yf+(yf+(yf+yi)/2)/2)/2)/2,xf,((yi+yf)/2)+((yf+(yf+(yf+yi)/2)/2)/2)/2,VAL_RED);//y=15/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,((yi+yf)/2)+((yi+(yf+(yf+yi)/2)/2)/2)/2,xf,((yi+yf)/2)+((yi+(yf+(yf+yi)/2)/2)/2)/2,VAL_RED);//y=11/16 line
PlotLine(panelHandle,PANEL_16X16GRAPH,xi,((yi+yf)/2)+((yi+(yi+(yf+yi)/2)/2)/2)/2,xf,((yi+yf)/2)+((yi+(yi+(yf+yi)/2)/2)/2)/2,VAL_RED);//y=9/16 line
}
现在我需要编写以下代码:
将任何 2x2 框的最佳路径保存为查找表
为每个图绘制最佳路径,并保存它碰到框边缘的位置。然后必须在下一步中使用该边缘点(当我将图形制作为 8x8,然后是 16x16 等时,直到找到良好近似的最小路径)
以及如何以有序的方式通过图形来执行此操作,以及如何保存最佳路径?
谢谢
