سلام
از اینکه به سوالم جواب می دهید کمال تشکررا دارم
میخواستم در صورتی که می توانید بیشتر راهنمایی ام کنید
عنوان برنامه به این صورت است که الگوریتم دایجسترا را طوری پیاده سازی کنید که برای n<=10 که خودمان این مقدار را وارد می کنیم بتواند وزن روی یالها را در این ماترسی ذخیره کرده وبا دادن راس مبدا ومقصد بتواند کمترین فاصله میان این دو راس را تعیین کند وهمچنین راس مبدا ومقصد را نیز کاربر باید تعیین کند.
برنامه را نیز فرستادم تا اگر می توانید کمکم کنید تا این تغییرات را روی آن اعمال کنم
(در اینجا راس مبدا s و راس مقصد t خواهد بود)
در نهایت منظورم دریافت دو عدد به عنوان ورودی که بایستی به عنوان ابعاد ماتریس قرار بگیرد وسپس دریافت وزنهای یالها وقرار گرفتن آنها در ماتریس وبعد دریافت راس مبدا ومقصد از ورودی است تا بتواند کوتاهترین مسیر را دریافت کند.

به عنوان مثال عدد 8 را بگیرد و ماتریسی به صورت 8*8 دریافت کند ووسپس دریافت وزنهای یالها وقرار گرفتن آنها در ماتریس وبعد دریافت راس مبدا ومقصد از ورودی است تا بتواند کوتاهترین مسیر را دریافت کند
با تشکر از توجه شما
:oops: :wink: :flower:

. #include<stdio.h>
#include<conio.h>
#define infinity 100
#define member 1
#define nomember 0
#define m 5
void shortest(int w[][m],int s,int t,int *pd);
int main()
{
int w[m][m]={{100,7,4,6,1},
{100,100,100,100,100},
{100,2,100,5,100},
{100,3,100,100,100},
{100,100,100,1,100}};
int pd,s=3,t=1;
clrscr();
shortest(w,s,t,&pd);
printf("source is %d,destination is %d\n",s,t);
printf("lenghth of shortest path is :%d",pd);
getch();
return (0);
};


void shortest(int w[][m],int s,int t,int *pd)
{
int distance[m],found[m];
int curent,i,k,dc;
int smalldist,newdist;
//initialization
for(i=0;i<m;i++)
{
found[i]=nomember;
distance[i]=infinity;
}
found[s]=member;
distance[s]=0;
curent=s;
while(curent!=t)
{
smalldist=infinity;
dc=distance[curent];
for(i=0;i<m;i++)
if(found[i]==nomember)
{
newdist=dc+w[curent][i];
if(newdist<distance[i])
distance[i]=newdist;
//determine the small distance
if(distance[i]<smalldist)
{
smalldist=distance[i];
k=i;
}
}
//end of for, if
curent=k;
found[curent]=member;
}
//end of while
*pd=distance[t];
}