c语言实现prim算法

参数传递应该没有问题
for(i=0;i<g->vexnum;i++) scanf("%s",&g->vexs[i]); //是不是这里错了?

Ⅱ 求数据结构(C语言)prim算法求最小生成树

PrimMST(G,来T,r){
//求图G的以r为根的MST,结果自放在T=(U,TE)中
InitCandidateSet(…);//初始化:设置初始的轻边候选集,并置T=({r},¢)
for(k=0;k<n-1;k++){ //求T的n-1条树边
(u,v)=SelectLiShtEdge(…);//选取轻边(u,v);
T←T∪{(u,v)};//扩充T,即(u,v)涂红加入TE,蓝点v并人红点集U
ModifyCandidateSet(…); //根据新红点v调整候选轻边集
}
}

Ⅲ 对任意的网和起点,用PRIM算法的基本思想求解出所有的最小生成树(C语言编写)

prim基本思想就是贪心,每次加最短的边
既然要求所有的
那就判断如果有两条或更多条都是最小,那就分支出多种情况。

Ⅳ 用c语言描述prim算法求最小生成树.... 求高人指点啊,给出完整的代码,那个邻接矩阵是要要一次全部输入的

#include <cstdio>
#include <iostream>
#include <memory.h>
using namespace std;
const int maxn=102;
const int inf=1<<30;
int map[maxn][maxn];
int dis[maxn];
bool flag[maxn];
int a,b,c,n,m,ans;

void init()
{
memset(map,-1,sizeof(map));
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(map[a][b]==-1 || c< map[a][b])
{
map[a][b]=map[b][a]=c;
}
}
}

void prim()
{
memset(flag,false,sizeof(flag));
for(int i=1;i<=n;i++)dis[i]=inf;
dis[1]=0;
ans=0;
for(int j=1;j<=n;j++)
{
int now,value=inf;
for(int i=1;i<=n;i++)
{
if(flag[i]==false && dis[i]<value)
{
value=dis[i];
now=i;
}
}
if(value==inf)
{
cout << "-1" <<endl;
return;
}
flag[now]=true;
ans+=dis[now];
for(int i=1;i<=n;i++)
{
if(!flag[i] && map[now][i]!=-1 && dis[i]>map[now][i])
dis[i]=map[now][i];
}
}
cout << ans <<endl;
}

int main()
{
//'freopen("in.txt","r",stdin);
while(cin >> n >> m)
{
init();
prim();
}
return 0;
}

测试数据:
Sample Input
3 3
1 2 1
1 3 1
2 3 3
Sample Output
2
既然问到了算法相信你能看懂测试数据是什么意思~

Ⅳ 求c语言程序代码

DDMS中Log信息分为几个级别(5个)

下列哪个是AbsoluteLayout中特有的属性(android:layout_x )

创建子菜单的方法是(B)
A,add B,addSubMenu C,createSubMenu D,createMenu

使用AIDL完成远程service方法调用下列说法不正确的是(A)
A, aidl对应的接口名称不能与aidl文件名相同
B, aidl的文件的内容类似java代码
C, 创建一个Service(服务),在服务的onBind(Intent intent)方法中返回实现了aidl接口的对象
D, aidl对应的接口的方法前面不能加访问权限修饰符

进度条中哪个属性是设置进度条大小格式的(D)
A,android:secondaryProgress B,android:progress C,android:max D,style

表示下拉列表的组件是(B)
A,Gallery B,Spinner C,GridView D,ListView

关于android中播放视频的说法不对的是(C)
A,可以使用SurfaceView组件播视频
B,可以使用VideoView组件播视频
C,VideoView组件可以控制播放的位置和大小
D,VideoView播放视频的格式可以是3gp

下列哪个是SqlLite下的命令(C)
A,shell B,push C,.quit D,keytool

下列关于 open core说法不正确的是(B)
A, Open core是Android多媒体框架的核心
B, MediaPlayer是open Core中的一个核心类
C, 所有在Android平台的音频、视频的采集以及播放等操作都是通过它来实现的
D, 在实现开发中我们并不会过多地研究open core的实现,我们的Android为我们提供了上层的media api的开发使用

拖动条组件是(C)
A,RatingBar B,ProgressBar C,SeekBar D,ScrollBar

关于隐式Intent正确的是(A)
A, android中使用IntentFilter 来寻找与隐式Intent相关的对象
B,通过组件的名称寻找与intent相关联的对象
C, 隐式Intent更多用于在应用程序内部传递消息
D, 一个声明了IntentFilter的组件只能响应隐式Intent请求

多选框被选择事件通常用(B)
A,setOnClickListener B,setOnCheckChangeListener
C, setOnMenuItemSelectedListener D,setOnCheckedListener

自定义对话框时,将视图对象添加到当前对话框的方法是(D)
A,setIcon B,setXML C,setLayout D,setView

下列不属于service生命周期的方法是(C)
A,onCreate B,onDestroy C,onStop D,onStart

绑定Service的方法是(A)
A,bindService B, startService C,onStart D,onBind

下列属于补间动画相关类的是(ACD)
A, TranslateAnimation B, FrameAnimation
C, RotateAnimation D, AlphaAnimation

下列哪些 api 的操作需要声明权限(CD)
A、播放 mp3 文件 B、读 SD 卡 (读 sd 卡状态) C、发短信 D、访问网络

在 android 中使用 SQLiteOpenHelper 这个辅助类时,哪些操作可能生成一个数据库, ab
A、getWriteableDatabase() B、getReadableDatabase()
C、getDatabase() D、getAbleDatabase()

下列对SharePreferences存、取文件的说法中正确的是:abd
A,属于移动存储解决方案 B,sharePreferences处理的就是key-value对
C,读取xml文件的路径是/sdcard/shared_prefx D,信息的保存格式是xml

NotificationManager中清除消息的方法是 bd
A,destroy B,cancel C,clear D,cancelAll

Ⅵ 用prim算法求最小生成树:c语言

把main函数抄改成:

main(){
GraphMatrix graph = {
"abcd",

{{7,8,Max,15},{12,100,6,20},{Max,100,4,13},{Max,4,8,10}},

};

Edge mst[Max];
int i,j;

prim(graph,mst);
for(j=0;j<Max;j++)
{
printf("%c\t",mst[j].stop_vex);
printf("%c\t",mst[j].start_vex);
printf("%d\n",mst[j].weight);
}
}

还有袭GraphMatrix结构体里的vexs数组最好定义为vexs[VN+1]给字符串末尾的‘\0'留地方。

Ⅶ C语言prim最小生成树问题 调试无提示错误,但运行到 PRIM中输出那一步就运行不了了,求大神解答~

运行不下去了?你看一下这一行代码的变量值,是不是k的值超过了数组范围,又或close[k-1]超范围了?

Ⅷ 关于PRIM算法求最小生成树的问题(c语言版)

/*
邻接矩阵存储图
测试数据
6 10
1 2 6
1 3 1
1 4 5
2 3 5
2 5 3
3 4 5
3 5 6
3 6 4
4 6 2
5 6 6
*/

#include <stdio.h>
#include <limits.h>
#define N 100

int p[N], key[N], tb[N][N];

void prim(int v, int n)
{
int i, j;
int min;

for (i = 1; i <= n; i++)
{
p[i] = v;
key[i] = tb[v][i];
}
key[v] = 0;
for (i = 2; i <= n; i++)
{
min = INT_MAX;
for (j = 1; j <= n; j++)
if (key[j] > 0 && key[j] < min)
{
v = j;
min = key[j];
}
printf("%d%d ", p[v], v);
key[v] = 0;
for (j = 1; j <= n; j++)
if (tb[v][j] < key[j])
p[j] = v, key[j] = tb[v][j];
}
}

int main()
{
int n, m;
int i, j;
int u, v, w;
while (scanf("%d%d", &n, &m))
{
for(i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
tb[i][j] = INT_MAX;
}

while (m--)
{
scanf("%d%d%d", &u, &v, &w);
tb[u][v] = tb[v][u] = w;
}
prim(1, n);
printf("\n");
}
return 0;
}

要求出所有的最小生成树。。貌似有点麻烦。。

Ⅸ C语言(关于图最小生成树方法)

/*
邻接矩阵存储图
测试数据
610
126
131
145
235
253
345
356
364
462
566
*/

#include<stdio.h>
#include<limits.h>
#defineN100

intp[N],key[N],tb[N][N];

voidprim(intv,intn)
{
inti,j;
intmin;

for(i=1;i<=n;i++)
{
p[i]=v;
key[i]=tb[v][i];
}
key[v]=0;
for(i=2;i<=n;i++)
{
min=INT_MAX;
for(j=1;j<=n;j++)
if(key[j]>0&&key[j]<min)
{
v=j;
min=key[j];
}
printf("%d%d",p[v],v);
key[v]=0;
for(j=1;j<=n;j++)
if(tb[v][j]<key[j])
p[j]=v,key[j]=tb[v][j];
}
}

intmain()
{
intn,m;
inti,j;
intu,v,w;
while(scanf("%d%d",&n,&m))
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
tb[i][j]=INT_MAX;
}

while(m--)
{
scanf("%d%d%d",&u,&v,&w);
tb[u][v]=tb[v][u]=w;
}
prim(1,n);
printf(" ");
}
return0;
}