本文目錄一覽:
學校超市選址問題(帶權有向圖的中心點)—-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語言數據結構 超市選址
【程序的設計要求】
要提供程序測試方案,程序一定要經得起測試,寧可功能少一些,也要能運行起來,不能運行的程序是沒有價值的。
【學生的培養要求】
你自己的能力,也要經得起測試,這個題就是測試你能力的,明顯你的能力不行,通不過嘛
通不過就通不過,寧可學的知識少一些,也要注重自己的品德,沒能力又沒品德,靠抄襲,就算做出來,也是沒有意義的
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/196349.html