📄 cd8_3u.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "cd8_3u.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TShape *sp[8];
TLabel *lb[8];
TLabel *lbl;
int graph[8][8]={9999};
int x[8],y[8];
int n,p,f,t,d;
bool vst[8]={false};
int dte[8]={0};
bool draw=false;
int i,j;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ctClick(TObject *Sender) //生成顶点
{
pnl->Enabled=true; //启动画板功能
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pnlMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y) //以鼠标点击方法来绘置结点
{
if(ct->Enabled==true)
{
if(n<8)
{
sp[n]=new TShape(Form1); //建立新结点控件
sp[n]->Parent=pnl; //设置新结点控件属性
sp[n]->Enabled=false;
sp[n]->Left=X-15;
sp[n]->Top=Y-15;
sp[n]->Height=30;
sp[n]->Width=30;
TColor color[8]={clWhite,clYellow,clLime,
clBlue,clRed,clAqua,clTeal,clNavy};
sp[n]->Brush->Color=color[n];
sp[n]->Shape=stEllipse;
lb[n]=new TLabel(pnl); //建立新结点标签
lb[n]->Parent=pnl; //设置新结点控件属性
lb[n]->Caption=n;
lb[n]->Transparent=true;
lb[n]->Left=X-5;
lb[n]->Top=Y-6;
x[n]=X-8; y[n]=Y-8; //存储新顶点坐标
if(n>0)
ln->Enabled=true;
}
else
ct->Enabled=false;
n++; //顶点计数器加1
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::finKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift) //以输入位置方式设置线条起点
{
if(Key==13)
{
f=StrToInt(fin->Text); //获取起点值
if(n>f)
{
img->Canvas->MoveTo(x[f],y[f]); //设定边线起点位置
fin->Enabled=false;
tin->Enabled=true;
Perform(WM_NEXTDLGCTL,0,0);
}
else
ShowMessage("请输入 0 ~ "+IntToStr(n-1));
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::tinKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift) //输入位置方法设定线条终点
{
if(Key==13)
{
t=StrToInt(tin->Text); //获取终点值
if(n>t)
{
img->Canvas->LineTo(x[t],y[t]); //绘制边线
tin->Enabled=false;
din->Enabled=true;
Perform(WM_NEXTDLGCTL,0,0);
}
else
ShowMessage("请输入 0 ~ "+IntToStr(n-1));
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::lnClick(TObject *Sender) //单击设定连线按钮事件
{
pnl->Cursor=crArrow;
img->Visible=true;
ct->Enabled=false;
ln->Enabled=false;
pn->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::dinKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift) //设定顶点间路径长度
{
if(Key==13)
{
d=StrToInt(din->Text); //获取用户设定的线段长度
lbl=new TLabel(Form1); //建立路径长度显示标签
lbl->Parent=pnl; //设置标签
lbl->Caption=d;
lbl->Left=(x[f]+x[t])/2; //显示标签位置
lbl->Top=(y[f]+y[t])/2;
din->Enabled=false; //整理输入面板
fin->Enabled=true;
tin->Text="";
fin->Text="";
din->Text="";
graph[f][t]=d; //有向图
Perform(WM_NEXTDLGCTL,0,0);
ok->Enabled=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::okClick(TObject *Sender) //边线设置ok按钮
{
ph->Enabled=true;
pn->Visible=false; //连线设置面板隐藏
}
//---------------------------------------------------------------------------
void __fastcall TForm1::phClick(TObject *Sender) //最短路径求解事件
{
do{
p=StrToInt(InputBox("最佳路径设定框",
"请输入目的顶点 0 ~"+IntToStr(n-1),""));
}while(p>=n||p<0); //控制输入范围
ph->Enabled=false;
int edg=1,min=9999,vtx; //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -