首先有向赋权图得用邻接表来表示宽好。
不知道邻接表是怎么建的,所以随便鼓捣了一下。。
#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=0i<sizei++){
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=1i<sizei++){
//寻找一个最近开头节点的节点
float temp=MAX_NUM
for(int j=0j<sizej++){
if(isused[j]==FALSE&&distance[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]==FALSE&&distance[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=0i<sizei++){
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=0i<sizei++){
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
}
超市选址的程序是:①设定超市应满足的基本条件
②在特定的区域中找出满足基本条件的地点
③确定影响经营成败的关键闹物拍要素
④对这几个地点的关键要素进行分析
⑤根据分析结果进一步筛选出几个重点地点
⑥对几个重点地点进行详细的调查分析
⑦书写各地点的选址调查报告
⑧比较各个调查结果
⑨进行选址决策
选址中的关键因素
(1)人口分析。对拟开发地点周围人口的经济潜力和经济状况进行分析,分析用地附近是否有蚂前值得依托的大量居住人口,人口的收入、购买力状况、消费习惯和消费心理等。人口分析要特别注意的一点是要用动态预测的手段来分析,即要关注未来人口自然增长和迁移以及人口收入的变化等。
(2)便利性分析。便利性分析的主要指标是交通易达性。交通易达性即交通便捷程度,主要取决于购物者从起点(一般是家里)到购物地点所花费的时间。需要特别指出的是,空间距离和时间距离是有区别的,易达性分析确定的距离液羡不仅仅是空间距离,因为空间距离和汽车行走需要的时间有区别。为此,有必要对汽车到该地点所花的时间进行测试。为了有效确定行车时间,可以根据所花费的时间绘制等时间距离图。
(3)竞争分析。竞争是指经营相似的产品的其他商家所可能带来的利益威胁。影响竞争的主要因素是经营同类产品的竞争者的营业面积、竞争者的空间距离、竞争者的品牌强度以及未来可能出现的竞争威胁。
超市管理系统*/
#include<stdio.h>
#include<string.h>
//欢迎界面//
void welcome()
//功能浏览//
void mainMenu()
//购物结算//
void saleCalc()
//进货管理//
void addGoods()
//修改信息
void updateGoods()
//显示商品//
void showGoods()
//删除商品//
void deleteGoods()
//查询商品//
int searchGoods()
//购买结算
void saleCalc()
//更新库存//
void updateGoodsNum(int number,char name[50])
//结构体
struct goods
{
char name[50]//商品名称
int num//商品数量
float price//商品价格
}
int count/雀族袭/商品种类数量
goods list[1000]//声明goods的变量数组
char name[50]
void main()//主函数
{
int num
welcome()
do{
mainMenu()
printf("请选择功能:")
scanf("%d",&num)
switch(num)
{
case 1:
saleCalc()
break
case 2:
addGoods()
break
case 3:
updateGoods()
break
case 4:
showGoods()
break
case 5:
deleteGoods()
break
case 0:
break
}
}while(num!=0)
}
void welcome()//欢迎界面
{
printf("-------------------------------------------------------------------------\n")
printf("****************欢迎使用超市管理系统*******************\n")
printf("-------------------------------------------------------------------------\n")
}
void mainMenu()//功能浏览界面
{
printf("****1.购物结算****\n")
printf("****2.进货管理****\n")
printf("****3.修改商品****\n")
printf("****4.显示商品****\n")
printf("****5.删穗厅除商品****\n")
printf("****0.退出系统****\n")
}
//查询信息
int searchGoods()//查询商品信息
{
printf("请输入您要购买商品的名字:")
scanf("%s",name)
for(int i=0i<counti++)
{
if(stricmp(name,list[i].name)==0)
{
return 1
}
else
{
printf("对不起了,没有找到%c商品\n",name)
return -1
}
}
}
//购物结算
void saleCalc()//购物结算
{
int number,i,s
float priceGoods=0,sum=0,money
char c=' '
s=searchGoods()
do
{
if(s==-1)
{
s=searchGoods()
}else
{
printf("该商品b存在")
for(i=0i<counti++)
{
if(strcmp(name,list[i].name)==0)
{
priceGoods=list[i].price
break
}
}
printf("请顷兄输入您要购买的数量:")
scanf("%d",&number)
sum=priceGoods*number
updateGoodsNum(-number,name)
printf("是否继续购买(y/n)")
fflush(stdin)
c=getchar()
}
}while(c=='y'||c=='Y')
printf("本次消费总金额为:%.2f",sum)
printf("请输入您的实际付款金额:")
scanf("%f",&money)
printf("找零:%.2f\n",money-sum)
}
//进货管理
void addGoods() //商品的录入
{
int i=0
char c=' '
do
{
printf("请输入商品的名称:")
fflush(stdin)
scanf("%s",list[i].name)
printf("请输入商品的数量:")
scanf("%d",&list[i].num)
printf("请输入商品的单价:")
scanf("%f",&list[i].price)
printf("是否继续(y/n)")
fflush(stdin)
c=getchar()
}while(c=='Y'||c=='y')
}
//更新库存
void updateGoodsNum(int number,char name[50])
{
int i
for(i=0i<counti++)
{
list[i].num+=number//list[i].num=list[i].num+number
}
}
//显示货物信息
void showGoods()
{
printf("商品名称\t数量\t单价\n")
for(int i=0i<counti++)
{
printf("%s\t%d\t%.2f\n",list[i].name,list[i].num,list[i].price)
}
}
//修改商品信息
void updateGoods()
{
int i
printf("请输入您要修改商品的名字:")
scanf("%s",&name)
for(i=0i<counti++)
{
if(strcmp(name,list[i].name)==0)
{
printf("请输入新的商品名字:")
scanf("%s",list[i].name)
printf("请输入您要修改商品的数量:")
scanf("%d",list[i].num)
printf("请输入您要修改商品的单价:")
scanf("%f",list[i].price)
}
else
{
printf("对不起,没有找到该商品信息!")
}
}
}
//删除商品信息
void deleteGoods()
{
int index=-1
printf("请输入您要删除的商品名字:")
scanf("%s",name)
for(int i=0i<counti++)
{
if(strcmp(name,list[i].name)==0)
{
index=i
}
}if(index==-1)
{
printf("对不起!没有找到您要删除的商品信息!")
}
else{
for(int i=indexi<counti++)
{
list[i]=list[i+1]
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)