#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct arry{ int city; int value; struct arry *next; }City; void check(int citynum,City *juzhen[],int loadvalue[],int loadnum) { int a,b,c,i; City *p; for(a=0;a<citynum;a++) { juzhen[a]=(City*)malloc(sizeof(City)); juzhen[a]->value=0; juzhen[a]->city=0; juzhen[a]->next=NULL; } for(i=0;i<citynum;i++) { p=juzhen[i]; for(b=0;b<loadnum;b++) { c=b*3; if(loadvalue[c]==b+1) { p->city=loadvalue[c+1]; p->value=loadvalue[c+2]; p->next=(City*)malloc(sizeof(City)); p=p->next; p->next=NULL; } } } } int deep(City *juzhen[],int citynum,int loadnum,int i,int count,int flag,int back) { qq:if(flag==1&&i==0&&juzhen[i]->next!=NULL) juzhen[i]=juzhen[i]->next,count=0,flag=0; count=count+juzhen[i]->value; i=juzhen[i]->city-1; if(count<0&&i==citynum-1) { back=1; goto pp; } if(i!=0&&juzhen[i]->city==0&&back!=1) flag=1,i=0; if(i==0&&juzhen[i]->next==NULL) goto pp; goto qq; pp:return back; } int main() { int citynum,loadnum,i=0,a=0,p=0,q=0,flag=0,count=0; int loadvalue[20001]; City *juzhen[1005]; printf("请输入城市的数量以及各个城市之间的通路的数量\n"); scanf("%d %d",&citynum,&loadnum); while(i<loadnum) { for(int m=0;m<3;m++) { scanf("%d",&loadvalue[a++]); } i++; } check(citynum,juzhen,loadvalue,loadnum); q=deep(juzhen,citynum,loadnum,p,count,flag,q); if(q==1) printf("YES\n"); else printf("NO\n"); return 0; } |
Double click to view unformatted code.