最小生成树问题???高分[急!!!!!!]

lymticsay 2004-12-12 06:34:23
=======================================
1. 问题描述
用邻接表表示带权的连通无向图。假设图中的每个关系用<起点,终点,权值>表示,则二元组表示该图如下:
K={<1,2,12>,<1,3,8>,<1,5,10>,<1,6,25>,<2,4,15>,<2,5,30>,<2,6,6>,<3,5,4>,<3,6,14>,<4,2,15>,<4,6,20>}找出最小生成树和各权值之和。
2. 要求
(1) 输出方式自选。
(2) 程序名为Graph5。
(3) 输出形式为:
顶点i 顶点j 权值
┇ ┇ ┇
权值和
==================================================
5.问题描述
输入20个不相等的数据,进行排序,并分成4个块,建立一个索引表,任意选择3个数据进行检索,指出分块检索的结果。
要求
(1) 由键盘上任意输入3个数据,显示检索是否成功或失败。如果成功,指出在第几块的第几个位置上。
(2) 程序名为Block_search5.
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevens2009 2004-12-16
  • 打赏
  • 举报
回复
m
bill_li 2004-12-14
  • 打赏
  • 举报
回复
《数据结构》上有,是叶加权最优二叉树,那部分的。不难,一定会的。
hj5182001 2004-12-14
  • 打赏
  • 举报
回复
如果前面太复杂那就用
我在http://community.csdn.net/Expert/topic/3631/3631808.xml?temp=.831402
谈的很清楚了
/* 用回溯法解决骑士周游问题的算法*/


#include<stdio.h>
#include<stdlib.h>

#define n 6 /*方阵为n*n的*/

#define MAXNUM n*n /* 栈中最大元素个数 */

int direction[8][2]={-1,2,-2,1,-2,-1,-1,-2,1,-2,2,-1,2,1,1,2};/*相对于位置(i,j)八个方向的增量*/
int area[n][n]; /*n*n方阵*/

int inarea(int x,int y)/*坐标(x,y)在区域内*/
{
return x>=0&&x<n&&y>=0&&y<n;
}

struct Node
{
int x,y,d;
};
typedef struct Node DataType;

struct SeqStack /* 顺序栈类型定义 */
{ DataType s[MAXNUM];
int t; /* 指示栈顶位置 */
};
typedef struct SeqStack *PSeqStack; /* 顺序栈类型的指针类型 */

PSeqStack createEmptyStack_seq( void )
{ PSeqStack pastack;
pastack = (PSeqStack)malloc(sizeof(struct SeqStack));
if (pastack==NULL)
printf("Out of space!! \n");
else
pastack->t=-1;
return (pastack);
}

int isEmptyStack_seq( PSeqStack pastack )
{
return ( pastack->t == -1 );
}

void push_seq( PSeqStack pastack, DataType x )
/* 在栈中压入一元素x */
{ if( pastack->t >= MAXNUM - 1 )
printf( "Overflow! \n" );
else
{ pastack->t = pastack->t + 1;
pastack->s[pastack->t] = x;
}
}

void pop_seq( PSeqStack pastack )
/* 删除栈顶元素 */
{ if (pastack->t == -1 )
printf( "Underflow!\n" );
else
pastack->t = pastack->t - 1;
}
DataType top_seq( PSeqStack pastack )
/* 当pastack所指的栈不为空栈时,求栈顶元素的值 */
{
return (pastack->s[pastack->t]);
}


void path(int x0,int y0)/*初始位置为(x0,y0)*/
{
int i,j,k;
int g,h;
int step;/*所游历的区域数*/
PSeqStack st;
DataType element;
st = createEmptyStack_seq( );
area[x0][y0]=1;/*1表示此位置游历过*/
element.x = x0;
element.y = y0;
element.d = -1;
push_seq(st,element); /* 初始点进栈 */
step=1;
do
{
element=top_seq(st);
pop_seq(st);
i = element.x;
j = element.y;
k = element.d+1;
area[i][j]=1;
while (k<8&&step<n*n) /* 依次试探每个可能方向 */
{ g=i+direction[k][0];
h=j+direction[k][1];
if (inarea(g,h)==1&&area[g][h]==0)
{
area[g][h]=1;
step++;
element.x = i;
element.y = j;
element.d = k;
push_seq(st,element); /* 进栈 */
i=g; /* 下一点转换成当前点 */
j=h;
k=-1;
}
k++;
}
if(step<n*n)
{
area[i][j]=0;
step--;
}

}while(!isEmptyStack_seq(st)&&step<n*n);
if(step<n*n)
printf("cannot find the path !\n");
else
{
printf("the reverse path is :\n");
printf(" %d , %d\n",g,h);
while(!isEmptyStack_seq(st))
{
element=top_seq(st);
pop_seq(st);
printf(" %d , %d\n",element.x,element.y);
}
}
}

int main()
{
int x0,y0;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
area[i][j]=0;/*初始化,0表示未游历过*/
printf("please input the position (x0,y0)\nx0=");
scanf("%d",&x0);
printf("y0=");
scanf("%d",&y0);
path(x0,y0);
return 0;
}
lymticsay 2004-12-12
  • 打赏
  • 举报
回复
哪个能把代码帮我贴出来啊
我明天就要交实验报告了 
5555555555555555
majiaNo1 2004-12-12
  • 打赏
  • 举报
回复
看书才是最好解决方案哦
qingyuan18 2004-12-12
  • 打赏
  • 举报
回复
《软件设计师教材》第8章数据结构,有完整的原代码。
Air23 2004-12-12
  • 打赏
  • 举报
回复
《数据结构》上有啊!
yangxile 2004-12-12
  • 打赏
  • 举报
回复
第一个用prim算法或者Kruskal算法

第二个不就是索引排序吗,楼主好好看看数据结构吧

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧