تالار گفتمان مانشت

نسخه‌ی کامل: سورس کد الگوریتم فلوید
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
میشه سورس کد برنامه ای که با الگوریتم فلوید کوتاهترین مسیر از هر راس در یک گراف به راس دیگر را پیدا کنه
با استفاده از یک آرایه دو بعدی
W یک آرایه ی دو بعدی است ستون و سطرهایی به اندازه ی رئوس گراف دارد ، چون از راسی حلقه ندارد قطر اصلی صفر است
از طرفی اگر از راسی به راسی مسیری مستقیم وجود نداشته باشید آن خانه با متغیری از نوع Long int پر میشود


"""" یعنی تبدیل این الگوریتم به کد"""

کد:
void Matris (int n, float W[][n] ,float D [][n-1] )
{
int i,j,k;
D=W;
for (k=0 ;k<n; k++)
for (i=0; i<n;k++)
for (j=0 ;j<n;j++)
D[i][j]=min (D[i][j],D[i][k]+D[k][j])
خیلی ممنون خواهش کمکم کنید
هرجور هست براتون جبران میکنم
سلام جوادی کجایی نبودی؟؟

کامل جواب میده فقط خودت تحلیل کن چون نیستم زیاد جواب بدم برام کار پیش اومده
نقل قول:
کد:
#include<iostream.h>

#include<conio.h>
#include<string.h>
#define MAX 64
using namespace std;
//**********
void path (int i,int j,int p[MAX][MAX])

{

if(p[i][j]!=0)

{

path (i,p[i][j],p);

cout<<"masire :"<<i<<" , "<<j<<" =:>>"<<p[i][j];

cout<<endl;

path (p[i][j],j,p);

}

}
void floyd (int D[MAX][MAX],int n,int p[MAX][MAX] )

{

int i,j,k;



for (k=1 ; k<=n ; k++)

for (i=1 ; i<=n ; i++)

for (j=1 ; j<=n ; j++)

if ( (D[i][k] + D[k][j]) < D[i][j] )

{

D[i][j] = D[i][k] + D[k][j];

p[i][j]=k;

}

cout<<"\njadvale tanzim shodeh ba algoritme floyd :\n\n";

for (i=1 ; i<=n ; i++)

{

for (j=1 ; j<=n ; j++)

if (D[i][j] == 9999)

cout<<"* ";

else
{

cout<<D[i][j]<<' ';

if (D[i][j]<=9)

cout<<' ';

}

cout<<endl;

}

cout<<endl;

cout<<"____________________________________________________";

cout<<endl;

for (i=1 ; i<=n ; i++)

{

for (j=1 ; j<=n ; j++)

cout<<p[i][j]<<" ";

cout<<endl;

}

cout<<endl;

cout<<"____________________________________________________";

cout<<endl;



for (int ii=1;ii<=n;ii++)



for (int jj=1;jj<=n;jj++)

path(ii,jj,p);

}
int main()

{

int i,j=0,n;

int W[MAX][MAX],p[MAX][MAX];

cout<<"tedade satr va sotoon ra bedahid : ";

cin>>n;

for (i=1 ; i<=n ; i++)

for (j=1 ; j<=n ; j++)

{

W[i][j]=0;

if (i != j)

{

cout<<"adade ["<<i<<"] ["<<j<<"] :=>> ";

cin>>W[i][j];

}

else

W[i][j]=0;

}

cout<<"Matrix Adad :\n\n";

for (i=1 ; i<=n ; i++)

{

cout<<'\t';

for (j=1 ; j<=n ; j++)

if (W[i][j] == 9999)

cout<<"* ";

else



cout<<W[i][j]<<' ';

cout<<endl;

}

for (i=1 ; i<=n ; i++)

for (j=1 ; j<=n ; j++)

p[i][j]=0;

floyd (W,n,p);

system("pause");
getch();
return 0;

}


آقا اینم به زبان سی شارپ البته اینو من امتحان نکردم

فقط مدیونی حذف کنی بزار دوستان هم استفاده کنند
نقل قول:
کد:
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace floyd
{
    class Program
    {
       /// Cite http://daneshju-club.com if you want to use the source code
       ///writing by navid
        static int[,] w;
        static int[,] d;
        static int[,] p;
        static int n, i, j, k, m;
        static void Main(string[] args)
        {
            Console.WriteLine("enter number of node:");
            n = Convert.ToInt32(Console.ReadLine());
            w = new int[n, n];
            d = new int[n, n];
            p = new int[n, n];
            Console.WriteLine("for inf insert ( 50 ):");
            for (i = 0; i < n; i++)
                for (j = 0; j < n; j++)
                {
                    Console.WriteLine("enter the value of [ " + (i) + " , " + (j) + " ] =");
                    w[i, j] = Convert.ToInt32(Console.ReadLine());

                }
            for (i = 0; i < n; i++)
                for (j = 0; j < n; j++)
                    p[i, j] = 0;
            for (i = 0; i < n; i++)
                for (j = 0; j < n; j++)
                    d[i, j] = w[i, j];

            for (k = 0; k < n; k++)
                for (i = 0; i < n; i++)
                    for (j = 0; j < n; j++)
                    {
                        m = d[i, k] + d[k, j];
                        if (m < d[i, j])
                        {
                            d[i, j] = m;
                            p[i, j] = k+1;
                        }
                    }
            Console.WriteLine("the short lenght matrix is:");
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                    Console.Write("  " + d[i, j]);
                Console.WriteLine();
            }
            Console.WriteLine("the p matrix is:");
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                    Console.Write("  " + p[i, j]);
                Console.WriteLine();
            }
            Console.WriteLine("insert i and j to find short path:");
            i = Convert.ToInt32(Console.ReadLine());
            j = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("the path is:");
            path(i, j);
            Console.Read();
        }
        static void path(int q, int r)
        {
            if (p[q, r] != 0)
            {
                path(q, p[q, r]);
                Console.Write("v" + p[q, r] + "  ");
                path(p[q, r], r);
            }
        }
    }
}
چشم
دستت درد نکنه
سلام دوست من .
گفتم برات یه مثال قرار بدم تا بیشتر متوجه بشی .
فرضا گرافی همانند زیر وجود دارد ماتریس c نیز برای این گراف به صورت زیر تعریف می شود : (گراف رو پیوست کردم)

[tex]\begin{bmatrix} 0 &5 &9999 &9999 \\ 50&0 & 15 & 5\\ 30&9999 &0 &15 \\ 15& 9999 &5 &0 \end{bmatrix}[/tex]

حالا دقت کن هر جا قرار دادم ۹۹۹۹ یعنی همون بینهایت که به معنی نبود هیچ یالی از راس i به راس j است .
این که روی قطر اصلی همه صفر هست یعنی ار گره i به خود گره i فاصله صفر هست .
اگه به صورت دستس هم امتحان کنی میبینی بازم کامل درسته .حالا من امتحان شدشم رو برات پیوست کردم .


خیالت راحت کد درست کار میکنه این کد رو دوست برنامه نویسمون آقای رستمی نوشته نه بنده فقط همیشه قطر اصلی صفر است و به جای بینهایت 9999
(13 اردیبهشت 1391 04:12 ب.ظ)javady_joon نوشته شده توسط: [ -> ]خیلی نوکرم
پس آقا جواب کتاب اشتباست دیگه
کدوم کتاب اسمش چیه؟؟؟/ این کتاب اما دوست من حتما باید روی قطر اصلی صفر باشه
دوست من
من خیلی از شما ممنونم
برنامه ی شما اشتبانیست، درسته
و این کتاب بود که مثل همیشه ضایع ام کرداشتباه بود
من از شما خیییییییییییییییییییییییییییییییلی ممنونم
سلام ممنون از الگوریتمی که گذاشتید
می خواستم بپرسم این الگوریتم فلوبدی که گذاشتید ایا وقتی گرافو بهش می دیم بهمون میگه که مثلا اگه بخوایم از شهر ۱ به ۳ بریم از چند تا شهر باید بگذریم و اون شهرا کدوم شهرا هستن؟
لینک مرجع