با سلام
دوستان کسی برنامه فلوید رو با c++ داره بذاره؟ شرمنده که درخواست کد کردم
Printable View
با سلام
دوستان کسی برنامه فلوید رو با c++ داره بذاره؟ شرمنده که درخواست کد کردم
سلام .
درخواست این گونه کدها کاملا مجاز هست .
این قطعه تابعش :
که در اینجا V تعداد رئوس هست و FloydMatrix هم یک ماتریس دو بعدی هست که برای ذخیره گراف استفاده شده .کد:int distance;
for( int k = 1; k <= V; k++ )
{
for( int i = 1; i <= V; i++ )
{
for( int j = 1; j <= V; j++ )
{
distance = FloydMatrix[ i ][ k ] + FloydMatrix[ k ][ j ];
if( distance < FloydMatrix[ i ][ j ] )
FloydMatrix[ i ][ j ] = distance;
}
}
}
ممنون برنامه شو نوشتم اما دو تا مشکل دارم
1. می خوام ماتریس p رو با استفاده از ** به تایع path پاس بدم(البته اگه خود ماتریس رو به صورت p[][n] بفرستم مشکلی نداره) اما پیغام میده که
cannot convert parameter 3 from 'int [4][4]' to 'int**2. من می خوام برای هر جفت نودی که کوتاهترین مسیر رو امتحان کردم تعداد نودهای میانی رو تو یه ارایه نگه دارم . نمی دونم کجا رو باید تغیر بدم.
کد:// floyd.cpp : Defines the entry point for the console application.
//
#include"stdafx.h"
#include"floyd.h"
#include"iostream"
#include<conio.h>
usingnamespace std;
void floyd(int n,int [][4],int [][4],int [][4]);
void path(int x,int y,int **p)
{
if(p[x][y]!=0)
{
path(x,p[x][y],p);
cout<<"v"<<p[x][y];
path(p[x][y],y,p);
}
}
int main()
{
int a[4][4],w[4][4],p[4][4],i,j;
cout<<"Enter your Matrix :\n";
for(i=0;i<4;i++){
for(j=0;j<4;j++)
{ p[i][j]=0;
cin>>a[i][j];
w[i][j]=a[i][j];
if(i!=j && a[i][j]==0)
w[i][j]=a[i][j]=100;
}
}
cout<<"==============\n";
cout<<"Your Matrix :\n";
for( i=0;i<4;i++){
for( j=0;j<4;j++)
cout<<a[i][j]<<" ";
cout<<endl;}
cout<<"==============\n";
floyd(4,a,w,p);
for( i=0;i<4;i++){
for( j=0;j<4;j++)
cout<<p[i][j]<<" ";
cout<<endl;}
cout<<"==============\n";
path(0,3,p);
getch();
return 0;
}
void floyd(int n, int w[][4],int d[][4],int p[][4])
{
int i,j,k;
for(k=0;k<4;k++)
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(d[i][k]+d[k][j]<d[i][j])
{
p[i][j]=k;
d[i][j]=d[i][k]+d[k][j];
}
}
دوستان برنام فلوید رو با ماتریس پویا نوشتم اما نمی دونم چرا خروجیش به شکل زیر است و چرا break میشه. این کدشه. لطفا راهنمایی کنید. دوم اینکه می خوام برای هر جفت نودی که بررسی میکنم شماره نودهایی که رو کوتاهترین مسیر قرار دارند تو یه ماتریس باشه. تو یه ارایه امکان پذیر بوده اما نمی دونم برای ماتریس چطوریه
کد:
// floyd.cpp : Defines the entry point for the console application.
//
#include"stdafx.h"
#include"floyd.h"
#include"iostream"
#include<conio.h>
#include"iomanip"
usingnamespace std;
int z[1000]={0};
int i=0;
void floyd(int n,int**d,int**p)
{
int i,j,k;
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(d[i][k]+d[k][j]<d[i][j])
{
p[i][j]=k;
d[i][j]=d[i][k]+d[k][j];
}
}void path(int x,int y,int **p )
{
if(p[x][y]!=0)
{
path(x,p[x][y],p);
cout<<"v"<<p[x][y];
z[i++]=p[x][y];//ذخیره شماره نودهای انتخابی در یه ارایه
path(p[x][y],y,p);
}
}
int main()
{
int **pp,**w,**p;
int i,j,n;
cout<<"enter number of node \n";
cin>>n;
pp=newint*[n];
p =newint*[n];
for(i=0;i<n;i++)
{
pp[i]=newint[n];
p[i] =newint[n];
}
cout<<"Enter your Matrix :\n";
for(i=0;i<n;i++){
for(j=0;j<n;j++)
{ pp[i][j]=0;
cin>>pp[i][j];
if(i!=j && pp[i][j]==0)
pp[i][j]=100;
}
}
cout<<"==============\n";
cout<<"Your Matrix :\n";
for( i=0;i<n;i++){
for( j=0;j<n;j++)
cout<<setw(5)<<pp[i][j]<<" ";
cout<<endl;}
cout<<"==============\n";
floyd(n,pp,p);
for( i=0;i<n;i++){
for( j=0;j<n;j++)
cout<<p[i][j]<<" ";
cout<<endl;}
cout<<"==============\n";
path(0,2,p);
cout<<"==============\n";
int x=0;
while(z[x]!=0)
{
cout<<z[x]<<" ";
x++;
}
getch();
return 0;
}
اینم خروجیه که عددهای عجیب غریب چاپ کرده