亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? unit1.~pas

?? 運(yùn)輸問題-西北角法的源程序
?? ~PAS
字號:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids, Buttons,math;
const long=250;
type
  TForm1 = class(TForm)
    panel2: TPanel;
    BitBtn2: TBitBtn;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    BitBtn1: TBitBtn;
    RadioGroup1: TRadioGroup;
    Label3: TLabel;
    StringGrid1: TStringGrid;
    BitBtn3: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
type  myset=set of 1..long;//自定義集合類型,集合元素類型為整型,
      //范圍1..long。
var m,n:integer; //m供應(yīng)站的數(shù)量;n需求站的數(shù)量
    a:array[1..long] of Real;//供應(yīng)站的供應(yīng)量(以單位計算)
    b:array[1..long] of Real;//需求站的需要量(以單位計算)
    c:array[1..long] of array[1..long] of real;//運(yùn)價矩陣
      //c[i,j]表示從第i個供應(yīng)站到第j個需求站單位產(chǎn)品的運(yùn)輸成本
    x:array[1..long] of array[1..long] of Real;//運(yùn)輸矩陣
      //x[i,j]表示從第i個供應(yīng)站供應(yīng)給第j個需求站x[i,j]個單位的產(chǎn)品
    z:real;//目標(biāo)函數(shù)值,即總的運(yùn)輸成本
    r:Integer;//關(guān)鍵行,當(dāng)前供應(yīng)站的下標(biāo)
    s:Integer;//關(guān)鍵列,當(dāng)前需求站的下標(biāo)
    rr:myset;//有待分配的供應(yīng)站的下標(biāo)的集合
    ss:myset;//有待分配的需求站的下標(biāo)的集合

    u:array[1..long] of Real;//供應(yīng)站的位勢值
    v:array[1..long] of Real;//需求站的位勢值
    d:array[1..long] of array[1..long] of real;//可能運(yùn)費(fèi)矩陣
    biaoshi:array[1..long] of array[1..long] of Char;//標(biāo)識符
procedure chushihuabianliang;
var i,j:Integer;
begin
for i:=1 to long do
  begin
    for j:=1 to long do
      begin
        c[i,j]:=0;
        x[i,j]:=0;
      end;
    a[i]:=0;
    b[i]:=0;
  end;
rr:=[];
ss:=[];
z:=0;
end;
{-------------初始化變量-------------------------------------}

function  find_r:Integer;
var i:integer;
begin
Result:=-1;
for i:=1 to m do
  if i in rr then
     begin
       Result:=i;
       break;
     end;
end;
{--------------原理第一步,尋找待分配的供應(yīng)站------------------------}

function  find_s:Integer;
var i:integer;
begin
Result:=-1;
for i:=1 to n do
  if i in ss then
     begin
       Result:=i;
       break;
     end;
end;
{--------------原理第一步,尋找待分配的需求站-------------------------}

procedure  first;
var i,j:Integer;
begin
for i:=1 to long do
  for j:=1 to long do
    d[i,j]:=-1;
for i:=1 to m do
  for j:=1 to n do
    if x[i,j]>0 then
      d[i,j]:=0;
end;
{--------------對應(yīng)步近法求解的第一步-----------------------------------}

procedure  second;
var i,j:Integer;
    cishu:Integer;//累加while執(zhí)行的次數(shù)
    temp_u:array[1..long] of Boolean;
    //長位long的boolean型變量數(shù)組,輔助判斷是否已求出所有的u
    temp_v:array[1..long] of Boolean;
    //長位long的boolean型變量數(shù)組,輔助判斷是否已求出所有的v
    temp_all:boolean;//判斷是否求出所有的u和v的位勢
    label 1;
begin
for i:=1 to long do
  begin
    temp_u[i]:=False;
    temp_v[i]:=False;
  end;//給局部變量賦初值為false表示沒有求出該點(diǎn)的位勢
for i:=1 to long do
  begin
    u[i]:=-1.11;
    v[i]:=-1.11;
  end;//初始化位勢值,此處無特別意義,只為防止浮點(diǎn)數(shù)運(yùn)算的出錯
{------------初始化變量-----------------------------------------------}

1:v[1]:=0;
temp_v[1]:=True;
temp_all:=False;
cishu:=0;
while (not temp_all) and  (cishu<(m+n)) do
  begin
    for i:=1 to m do
      if not temp_u[i] then
      begin
        for j:=1 to n do
          if temp_v[j] and (d[i,j]=0) then
             begin
               u[i]:=c[i,j]-v[j];
               temp_u[i]:=True;
               break;
             end;
      end;//根據(jù)v的位勢,搜索求解u的位勢
    for j:=1 to n do
      if not temp_v[j] then
      begin
        for i:=1 to m do
          if temp_u[i] and (d[i,j]=0) then
            begin
               v[j]:=c[i,j]-u[i];
               temp_v[j]:=True;
               break;
             end;
      end;//根據(jù)u的位勢,搜索求解v的位勢
    temp_all:=True;
    for i:=1 to m do
      if temp_u[i]=False  then
         temp_all:=False;
    for j:=1 to n do
       if temp_v[j]=False  then
         temp_all:=False;
    cishu:=cishu+1;
  end;//while語句的結(jié)束

if cishu=2*m*n then
   begin
     //showmessage('退化解');
     for i:=1 to m do
       if temp_u[i]=False then
         for j:=1 to n do
           if temp_v[j]=False then
              begin
                d[i,j]:=0;
                goto  1;
              end;
   end;
end;
{--------------對應(yīng)步近法求解的第二步-----------------------------------}

procedure  third;
var i,j:Integer;
begin
for i:=1 to m do
  for j:=1 to n do
    if d[i,j]=-1 then
       d[i,j]:=u[i]+v[j]-c[i,j];
  //計算非基變量的檢驗數(shù)
end;
{--------------對應(yīng)步近法求解的第三步-----------------------------------}

procedure  four;
var i,j:Integer;
begin
temp:=False;
for i:=1 to long do
  for j:=1 to long do
    if (x[i,j]=0) and (d[i,j]=0) then
        biaoshi[i,j]:='*';
end;
{--------------對應(yīng)步近法求解的第四步-----------------------------------}

procedure five;
var i,j:Integer;
    temp:real; //最大值
begin
temp:=d[1,1]; //初始化最大值
r:=1;
s:=1;//記錄最大值的位置
for i:=1 to m do
  for j:=1 to n do
    if d[i,j]>temp then
      begin
        temp:=d[i,j];
        r:=i;
        s:=j;
      end;//尋找定位最大值
end;
{--------------對應(yīng)步近法求解的第五步-----------------------------------}

procedure seven;
var i,j:Integer;
    temp:boolean;
    temp_s:integer;
    temp_r:integer;
    biaoshishuliang:Integer;
    label 1;
begin
biaoshi[r,s]:='+';//標(biāo)明帶“+”的元素x[r,s]
temp_r:=r;//從第r行開始找
temp_s:=s;
biaoshishuliang:=1;
1:for j:=1 to n do
    if (j<>temp_s) and (x[temp_r,j]>0) then //找大于零的元素
       begin
         temp:=False;
         for i:=1 to m do
           if i<>temp_r then //除去當(dāng)前行
           begin
             if  (x[i,j]>0) or (biaoshi[i,j]='*')  then
               begin
                 temp:=True;
                 Break;
               end;//判斷改列中是否有大于零或標(biāo)識為*的元素
           end;
         if (biaoshishuliang>1) and odd(biaoshishuliang) and (j=s) then
            temp:=true;
         if temp then
           begin
              biaoshi[temp_r,j]:='-';
              temp_s:=j;
              biaoshishuliang:=biaoshishuliang+1;
              Break;
           end;
       end; //在r行中找出一個大于零的元素
temp:=False;
for i:=1 to m do
  if biaoshi[i,s]='-' then
    begin
      temp:=True;
      Break;
    end;
if not temp then
  begin
    for i:=1 to m do
      if (i<>temp_r) and ((x[i,temp_s]>0) or (biaoshi[i,temp_s]='*')) then
         begin
           temp:=False;
           for j:=1 to n do
             if  (j<>temp_s) and (x[i,j]>0) then
               begin
                 temp:=True;
                 Break;
               end;
           if temp then
             begin
               biaoshi[i,temp_s]:='+';
               temp_r:=i;
               biaoshishuliang:=biaoshishuliang+1;
               break;
             end;
         end;
     goto 1;
  end;
end;
{--------------對應(yīng)步近法求解的第七步-----------------------------------}

procedure eight;
var i,j:Integer;
    temp:real; //最小值
    temp_s:integer;
    temp_r:integer;
begin
for i:=1 to m do
  for j:=1 to n do
    if biaoshi[i,j]='-' then
      begin
        temp:=abs(x[i,j]);
        temp_r:=i;
        temp_s:=j;
        break;
      end; //確定一個初始最小值
for i:=1 to m do
  for j:=1 to n do
    if (biaoshi[i,j]='-') and (abs(x[i,j])<temp) then
      begin
        temp:=abs(x[i,j]);
        temp_r:=i;
        temp_s:=j;
      end;//尋找最小值并定位
for i:=1 to m do
  for j:=1 to n do
     begin
       if  biaoshi[i,j]='+' then
          x[i,j]:=x[i,j]+temp
       else if biaoshi[i,j]='-' then
          x[i,j]:=x[i,j]-temp;
     end;//更新運(yùn)輸矩陣
end;
{--------------對應(yīng)步近法求解的第八步-----------------------------------}
procedure TForm1.BitBtn1Click(Sender: TObject);
var i,j:Integer;
begin
m:=StrToInt(Edit1.Text);
n:=StrToInt(Edit2.Text);
with StringGrid1 do
  begin
    RowCount:=m+2;
    ColCount:=n+2;
    for i:=0 to RowCount-1 do
      for j:=0 to ColCount-1 do
        Cells[j,i]:='';
    Width:=ColCount*(DefaultColWidth+2);
    Height:=RowCount*(DefaultRowHeight+2);
    top:=(panel2.Height-Height) div 2-20;
    Left:=(panel2.Width-Width) div 2;
    for i:=1 to m do
      Cells[0,i]:='A'+IntToStr(i);
    for j:=1 to n do
      Cells[j,0]:='B'+IntToStr(j);
    Cells[0,0]:='供\需';
    Cells[0,m+1]:='需求量';
    Cells[n+1,0]:='供應(yīng)量';
  end;
BitBtn2.Enabled:=True;
StringGrid1.SetFocus;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var i,j:Integer;
    temp:real;
    //臨時變量,輔助在供應(yīng)站和需求站種尋找最小的供需量
begin
chushihuabianliang;
for i:=1 to m do
  for j:=1 to n do
    if StringGrid1.Cells[j,i]<>'' then
       c[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
//讀取運(yùn)價矩陣
for i:=1 to m do
  if StringGrid1.Cells[n+1,i]<>'' then
     a[i]:=StrToFloat(StringGrid1.Cells[n+1,i]);
//讀取供應(yīng)量
for j:=1 to n do
  if StringGrid1.Cells[j,m+1]<>'' then
     b[j]:=StrToFloat(StringGrid1.Cells[j,m+1]);
//讀取需求量
{----------讀取已知條件,運(yùn)價矩陣、供應(yīng)量、需求量------------}
for i:=1 to m  do
  rr:=rr+[i];//設(shè)置初始待分配的供應(yīng)站的下標(biāo)集合
for j:=1 to n do
  ss:=ss+[j];//設(shè)置初始待分配的需求站的下標(biāo)集合

while (ss<>[]) or (rr<>[]) do
  begin
    r:=find_r;
    s:=find_s;//完成原理的第一步
    if r=-1 then
      begin
        temp:=b[s];
        b[s]:=b[s]-temp;
        if b[s]=0 then ss:=ss-[s];
      end
    else if s=-1 then
      begin
        temp:=a[r];
        a[r]:=a[r]-temp;
        if a[r]=0 then rr:=rr-[r];
      end
    else
    begin
    temp:=min(a[r],b[s]);
    x[r,s]:=temp;
    a[r]:=a[r]-temp;
    b[s]:=b[s]-temp;//完成原理的第二步
    if a[r]=0 then rr:=rr-[r];
    if b[s]=0 then ss:=ss-[s];
    end;
  end;
for i:=1 to m do
  for j:=1 to n do
    StringGrid1.Cells[j,i]:=FloatToStr(x[i,j]);
{----------求取并顯示最初可行的運(yùn)輸方案-------------------------------}
BitBtn2.Enabled:=False;
BitBtn3.Enabled:=True;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
var i,j:Integer;
    label 1;
begin
1:first;
second;
third;
for i:=1 to m do
  for j:=1 to n do
    biaoshi[i,j]:=#0;
four;
five;
if d[r,s]<=0 then
  begin
    z:=0;
    for i:=1 to m do
      for j:=1 to n do
        begin
          StringGrid1.Cells[j,i]:=FloatToStr(x[i,j]);
          z:=z+x[i,j]*c[i,j];
        end;
     ShowMessage('最小運(yùn)費(fèi)是:'+FormatFloat('0.###',z));
     BitBtn3.Enabled:=False;
  end
else
  begin
    seven;
    eight;
    goto 1;
  end;
end;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本乱人伦aⅴ精品| 在线免费观看日韩欧美| 亚洲视频在线观看三级| 在线播放国产精品二区一二区四区| 精品一区二区三区在线播放| 最新日韩av在线| 精品国产乱码久久久久久久 | 偷窥少妇高潮呻吟av久久免费| 欧美大片在线观看一区二区| 99精品久久免费看蜜臀剧情介绍| 欧美a级一区二区| 一区二区三区中文免费| 国产欧美精品一区二区色综合 | 日韩免费观看高清完整版在线观看| 粉嫩av亚洲一区二区图片| 日本美女一区二区| 亚洲综合久久久久| 亚洲欧洲另类国产综合| 欧美v日韩v国产v| 欧美视频你懂的| 91丨porny丨蝌蚪视频| 国产一区不卡在线| 激情综合色播激情啊| 天堂久久久久va久久久久| 亚洲精品国产无套在线观| 国产欧美一区二区三区网站| 日韩一区二区在线看| 91精品一区二区三区在线观看| 91首页免费视频| 99精品热视频| 99久久er热在这里只有精品15| 国产精品一区专区| 国产精品一区二区你懂的| 精品一二三四区| 激情偷乱视频一区二区三区| 免费观看在线色综合| 日韩成人午夜精品| 日本vs亚洲vs韩国一区三区二区| 亚洲制服欧美中文字幕中文字幕| 亚洲欧美影音先锋| 中文字幕一区日韩精品欧美| 国产精品网曝门| 国产精品午夜久久| 国产精品动漫网站| 伊人开心综合网| 洋洋成人永久网站入口| 亚洲一区二区三区三| 亚洲国产日产av| 午夜精品久久久久久久99樱桃| 亚洲第一综合色| 日本欧美一区二区三区| 免费成人在线观看视频| 久久电影网站中文字幕| 精品一区二区在线视频| 国产91丝袜在线观看| va亚洲va日韩不卡在线观看| eeuss鲁片一区二区三区在线观看| 成人av在线观| 色天使久久综合网天天| 欧美亚洲动漫制服丝袜| 911精品产国品一二三产区| 日韩欧美电影在线| 久久久99久久精品欧美| 国产精品青草综合久久久久99| 亚洲欧美自拍偷拍| 一区二区三区加勒比av| 日韩电影在线一区| 国产精品一区二区在线观看不卡 | 国产精品白丝jk黑袜喷水| caoporn国产精品| 欧美三级三级三级爽爽爽| 91精品国产综合久久香蕉麻豆| 精品福利av导航| 国产精品高潮呻吟| 亚洲成人av资源| 国产精品自拍三区| 在线观看91精品国产入口| 欧美一区午夜视频在线观看| 久久久久综合网| 一区二区三区四区在线免费观看 | 久久久亚洲精华液精华液精华液 | 免费成人结看片| 国产成人综合视频| 欧美曰成人黄网| 久久免费偷拍视频| 亚洲一区免费视频| 国产精品伊人色| 欧美日韩国产综合一区二区| 欧美精品一区二区久久久| 亚洲免费伊人电影| 狠狠色丁香婷婷综合| 在线这里只有精品| 久久精品夜色噜噜亚洲a∨ | 国产一区二区福利| 一本大道综合伊人精品热热| 日韩午夜激情视频| 亚洲激情在线播放| 国产一区二区中文字幕| 欧美日韩精品一区二区三区四区| 国产欧美日韩精品一区| 天天色图综合网| 91首页免费视频| 国产亚洲精品久| 美女视频网站久久| 色狠狠av一区二区三区| 国产欧美日韩在线| 精品午夜久久福利影院 | 国产精品国产a| 国产乱淫av一区二区三区| 欧美日韩亚洲综合一区| 国产精品久久久久久久久搜平片| 久色婷婷小香蕉久久| 欧美亚洲日本国产| 亚洲天堂免费在线观看视频| 国产一区二区精品在线观看| 日韩亚洲欧美一区| 首页国产丝袜综合| 欧美日韩午夜影院| 亚洲国产欧美日韩另类综合 | 欧美视频中文一区二区三区在线观看| 精品对白一区国产伦| 免费人成在线不卡| 欧美日韩一区小说| 夜夜精品视频一区二区 | 26uuu色噜噜精品一区二区| 亚洲mv大片欧洲mv大片精品| 一本大道久久a久久精品综合| 国产欧美一区二区精品秋霞影院| 国产资源精品在线观看| 日韩欧美一区二区免费| 日韩精品一二区| 678五月天丁香亚洲综合网| 亚洲综合999| 欧美伊人久久久久久久久影院| 亚洲品质自拍视频| 91小视频免费观看| 亚洲另类在线一区| 色综合久久66| 亚洲激情在线激情| 欧美午夜精品免费| 爽好多水快深点欧美视频| 91精品国产日韩91久久久久久| 亚洲.国产.中文慕字在线| 欧美日韩精品久久久| 日韩激情中文字幕| 日韩精品一区二区三区在线播放| 麻豆中文一区二区| 久久久99精品免费观看不卡| 国产高清视频一区| 日韩美女精品在线| 在线精品国精品国产尤物884a| 亚洲一区二区三区三| 678五月天丁香亚洲综合网| 久久精品国产第一区二区三区| 欧美xxx久久| 成人国产精品免费观看| 亚洲乱码国产乱码精品精的特点| 日本大香伊一区二区三区| 五月婷婷综合网| 精品国产三级电影在线观看| 成人在线视频一区| 亚洲一区在线视频| 日韩精品一区二区三区在线| 国产成人在线视频网站| 亚洲欧美一区二区三区国产精品| 欧美日韩一区二区三区不卡| 日韩高清一区在线| 久久久国产精品麻豆| 91麻豆成人久久精品二区三区| 亚洲第一成年网| 久久在线免费观看| 一本大道久久精品懂色aⅴ| 日本一不卡视频| 欧美极品少妇xxxxⅹ高跟鞋| 色婷婷综合久色| 麻豆国产精品777777在线| 国产日本欧洲亚洲| 欧美女孩性生活视频| 国产精品亚洲人在线观看| 亚洲综合小说图片| 久久久久国产免费免费| 色婷婷av一区| 国产精品一二三四| 亚洲一区二区三区视频在线播放| 2024国产精品视频| 91福利精品第一导航| 精品系列免费在线观看| 一区二区欧美精品| 国产亚洲婷婷免费| 欧美日韩卡一卡二| 99久久精品情趣| 美国欧美日韩国产在线播放| 亚洲女同女同女同女同女同69| 欧美一区二区视频在线观看2022 | 欧美日韩在线直播| 国产麻豆视频精品| 日本不卡视频在线| 亚洲最大成人综合| 欧美—级在线免费片| 欧美成人激情免费网|