⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cd8_3u.cpp

📁 C++ Builder程序员学习数据结构第8章
💻 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 + -