CSP考试 2015年03月第5题 C语言实现

来源:互联网 发布:js 数组变量 编辑:程序博客网 时间:2024/06/04 22:52



#include <stdio.h>main(){//吃了吗//需要栈 //int NUM1=6;//int NUM2=4;int NUM1;int NUM2;int i;scanf("%d",&NUM1);scanf("%d",&NUM2);int p[NUM1+1];p[0]=-1;/* p[1]=1;p[2]=7;p[3]=3;p[4]=2;p[5]=5;p[6]=6;*/for(i=1;i<NUM1+1;i++){scanf("%d",&p[i]);}int a[NUM1-1];//线路可以染色 int b[NUM1-1];int c[NUM1-1];int color[NUM1-1];for(i=0;i<NUM1-1;i++){color[i]=0;}for(i=0;i<NUM1-1;i++){scanf("%d",&a[i]);scanf("%d",&b[i]);scanf("%d",&c[i]);}/*a[0]=1,b[0]=2,c[0]=4;a[1]=1,b[1]=3,c[1]=5;a[2]=2,b[2]=4,c[2]=1;a[3]=3,b[3]=5,c[3]=2;a[4]=3,b[4]=6,c[4]=1; */int e[NUM2];int f[NUM2];for(i=0;i<NUM2;i++){scanf("%d",&e[i]);scanf("%d",&f[i]);}/*e[0]=2,f[0]=5;e[1]=4,f[1]=6;e[2]=6,f[2]=4;e[3]=5,f[3]=6;*/int zhan[NUM1];//栈 for(i=0;i<NUM1;i++){zhan[i]=0;//printf("%d",i);}int h=0;int flag;int j;int find;int lu;//printf("hello\n");for(lu=0;lu<NUM2;lu++)//lu=2;{if(lu==2){//break;}//printf("lu %d\n",lu);for(i=0;i<NUM1;i++){zhan[i]=0;//printf("%d",i);}h=0;//栈的使用要小心 for(i=0;i<NUM1-1;i++){color[i]=0;}//别忘了初始化 zhan[0]=e[lu];//int nei=-1;for(find=e[lu];find!=f[lu];)////find=e[1];{//printf("hello %d\n",lu);//printf("lu %d\n",lu);if(nei==0)//从栈里弹出一个 {//不改变color h--;//printf("hello\n");find=zhan[h];//break;}if(find==e[lu])//{//printf("find %d\n",find);}nei=0;for(i=0;i<NUM1-1;i++){if((a[i]==find)&&(color[i]==0))//在数组a中寻找 {nei=1;flag=0;for(j=0;j<=h;j++)//从栈里检查 {if(zhan[j]==b[i]){flag=1;}}if(flag==0){h++;zhan[h]=b[i];color[i]=1;find=b[i];//printf("find %d\n",find);}}if((b[i]==find)&&(color[i]==0))//在数组b中寻找 {//printf("%d\n",b[i]); nei=1;flag=0;for(j=0;j<=h;j++)//从栈里检查 {if(zhan[j]==a[i]){flag=1;//printf("j %d\n",j);}}if(flag==0){//printf("hello\n");h++;zhan[h]=a[i];color[i]=1;find=a[i];//printf("find %d\n",find);}}}//nei=1;    }        for(i=0;i<NUM1;i++){//if(zhan[i]!=0){//printf("%d\n",zhan[i]);}//printf("%d",i);}//算吃的 int pri=p[zhan[0]];int money=0;for(i=0;i<NUM1;i++){if(zhan[i]==0){break;}for(j=0;j<NUM1-1;j++){if((a[j]==zhan[i])&&(b[j]==zhan[i+1])){if(p[zhan[i]]<pri){pri=p[zhan[i]];}money=money+pri*c[j];//printf("money %d\n",money);}else if((b[j]==zhan[i])&&(a[j]==zhan[i+1])){if(p[zhan[i]]<pri){pri=p[zhan[i]];}money=money+pri*c[j];//printf("money %d\n",money);}}} printf("%d\n",money); }} 


0 0