(۲۲-آذر-۱۳۸۹, ۱۲:۰۶:۵۰)homay نوشته است: سلام من نیاز به برنماه ای دارم که در اون الگوریتم پریم پیاده سازی شده باشه به هر زبانی فرق نمی کنه ولی cباشه بهتره فقط خیلی فوریه ممنون مسشم کمکم کنین
سلام این موضوع تکراری می باشد.
الگوریتم پریم
کد:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
struct krus{
int v1;
int v2;
int weight;
};
int perim (int set[],struct krus edge[],int n,int m);
void sort(struct krus ed[],int m);
void main()
{
clrscr();
int n,m;
cout<<"Input Num Vertex : ";
cin>>n;
int set[10];
for (int i=0;i<n;i++)
set[i]=i;
cout<<"Input Num Yal : ";
cin>>m;
struct krus edge[20];
for (i=0;i<m;i++)
{
cout<<" Num V1 : "; cin>>edge[i].v1;
cout<<" Num V2 : "; cin>>edge[i].v2;
cout<<" Weight : "; cin>>edge[i].weight;
gotoxy(wherex()+30,wherey()-2);
cout<<"("<<edge[i].v1<<","<<edge[i].v2<<") => W :"<<edge[i].weight<<"\n";
gotoxy(1,wherey()+2);
}
cout<<"\nWeight Is : "<<perim(set,edge,n,m);
getch();
}
//***********************************************
int perim(int set[],struct krus edge[],int n,int m)
{
int fe=0;
int p=0;
struct krus e;
while (fe<n-1)
{
//********************************
int y=0;
e.weight=0;
for (int i=0;i<m;i++)
if ((set[edge[i].v1]==0 && set[edge[i].v2]!=0) || (set[edge[i].v2]==0 && set[edge[i].v1]!=0))
{
if(y==0)
{
e=edge[i];
y++;
}
else
if (e.weight>edge[i].weight)
e=edge[i];
}
//**********************************
if (y!=0)
{
p+=e.weight;
cout<<"("<<e.v1<<","<<e.v2<<") => W :"<<e.weight<<"\t";
set[e.v1]=0;
set[e.v2]=0;
fe++;
}
else
break;
}
return p;
}
http://www.iranled.com/forum/thread-23539.html