您的位置:

c语言选址,c语言中的定义

本文目录一览:

学校超市选址问题(带权有向图的中心点)----C 语言

这是最短路径问题

首先有向赋权图得用邻接表来表示。

不知道邻接表是怎么建的,所以随便鼓捣了一下。。

#include stdio.h

#include stdlib.h

#include string.h

#define alloc(type) (type*)malloc(sizeof(type))

#define MAX_NUM 3.14E38

#define TRUE 1

#define FALSE 0

#define NODE_NUM 8

struct adj_list{

int index;

char name[10];

float len;

struct adj_list *next;

};

typedef struct adj_list Node;

//node[]为起始节点数组

int dijkstra(Node node[],int size,int first,float distance[],int previous[]){

//初始化数组

int *isused=new int[size];

for(int i=0;isize;i++){

distance[i]=MAX_NUM;

isused[i]=FALSE;

previous[i]=-1;

}

//初始起始节点和邻接节点间的距离

Node *pos=node[first].next;

if(pos==NULL)

return 0;

while(pos!=NULL){

distance[pos-index]=pos-len;

previous[pos-index]=first;

pos=pos-next;

}

//初始化开头节点

distance[first]=0;

isused[first]=TRUE;

int current=first;

//这里不是对所有的起始节点进行遍历

for(i=1;isize;i++){

//寻找一个最近开头节点的节点

float temp=MAX_NUM;

for(int j=0;jsize;j++){

if(isused[j]==FALSEdistance[j]temp){

current=j;

temp=distance[j];

}

}

if(current==first) break;

isused[current]=TRUE;

//更新distance[]列表

pos=node[current].next;

while(pos!=NULL){

if(isused[pos-index]==FALSEdistance[pos-index]distance[current]+pos-len){

distance[pos-index]=distance[current]+pos-len;

previous[pos-index]=current;

}

pos=pos-next;

}

}

return current;

}

//追踪线路

void printTrace(int lastindex,Node node[],int previous[]){

printf("最短路径为:");

if(lastindex==0)

printf("%s",node[0].name);

else{

int pos=lastindex;

while(true){

printf("%s ",node[pos].name);

if(pos==0) break;

pos=previous[pos];

}

printf("\n");

}

}

void generate(Node node[],int size){

//先输入顶点名字,然后按格式输入后面的链表节点

//格式为:name index len

//输入#结束链表节点的输入,转入其他顶点

for(int i=0;isize;i++){

printf("%d\n",i);

scanf("%s",node[i].name);

node[i].len=0.0;

node[i].index=i;

node[i].next=NULL;

Node *pos=node[i];

char name[10];

int index=0;

float len=0.0;

while(true){

scanf("%s",name);

if(strcmp(name,"#")==0) break;

scanf("%d %f",index,len);

Node *no=alloc(Node);

strcpy(no-name,name);

no-index=index;

no-len=len;

no-next=NULL;

pos-next=no;

pos=pos-next;

}

}

}

void printnode(Node *node){

printf("(%d,%s,%g)",node-index,node-name,node-len);

}

void showtable(Node node[],int size){

for(int i=0;isize;i++){

printnode(node+i);

Node *pos=node[i].next;

while(pos!=NULL){

printf("-");

printnode(pos);

pos=pos-next;

}

printf("\n");

}

}

int main(){

Node node[NODE_NUM];

generate(node,NODE_NUM);

float distance[NODE_NUM];

int previous[NODE_NUM];

int lastindex=dijkstra(node,NODE_NUM,0,distance,previous);

printTrace(lastindex,node,previous);

return 0;

}

c语言的一个小问题

没必要那么复杂吧,其实只要分别求x和y的加权平均数就行了。读文本我省略了,直接储存成数据了。

#include stdio.h

#include stdlib.h

double X[8]={10,30,19,38,9,2,5,29};

double Y[8]={20,34,25,49.1,38.1,34,8};

int People[8]={30,45,28,8,36,16,78,56};

main()

{

double X_=0,Y_=0;

int i;

int PeopleCount=0;

for(i=0;i8;i++)

PeopleCount+=People[i];//总人数

for(i=0;i8;i++)

X_+=X[i]*People[i]/PeopleCount;//求x的加权平均数

for(i=0;i8;i++)

Y_+=Y[i]*People[i]/PeopleCount;//求y的加权平均数

printf("Best location:(%f,%f)",X_,Y_);

return 0;

}

程序运行后输出(16.350168,19.402020)

C语言中为新建医院选址问题

假设distance[i][j]存储了村庄之间的距离

定义int a[N];

a[i],假设在第i个村庄建立医院,那么最远村庄到该医院的距离。

for(i=0; iN; i++){//假设在第i个村庄建立医院

a[i] = 0;

for(j=0;jN; j++)

if(a[i]distance[i][j]) a[i]=distance[i][j];//寻找最远村庄,将最远距离保存到a[i]

}

//在a数组中寻找最小值。

for(i=0; iN; i++){

//略

}

//最小值对应的下标就是村庄。

//略。输出。

C语言数据结构 超市选址

【程序的设计要求】

要提供程序测试方案,程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。

【学生的培养要求】

你自己的能力,也要经得起测试,这个题就是测试你能力的,明显你的能力不行,通不过嘛

通不过就通不过,宁可学的知识少一些,也要注重自己的品德,没能力又没品德,靠抄袭,就算做出来,也是没有意义的