PAT 1018 (一个点没过)

#include
#include
#define Infinite 32767
struct station{
	int car;
	int send;
	int back;
	int distance;
	int parent;
	int visit;
} vertix[505];
int cmax,n,sp;
int map[505][505];

void Dijkstra(){
	int u,v,i;
	int distance;
	vertix[0].distance = 0;
	while(1){
		u = -1;
		distance = Infinite;
		for(i = 0;i=cmax/2)
					{
						vertix[i].back = vertix[i].car - cmax/2 + vertix[u].back;
						vertix[i].send = vertix[u].send;
					}
					else{
						if(vertix[u].back>=cmax/2 - vertix[i].car){
							vertix[i].back = vertix[u].back - cmax/2 + vertix[i].car;
							vertix[i].send = vertix[u].send;
						}
						else{
							vertix[i].send = vertix[u].send + cmax/2 - vertix[i].car - vertix[u].back;
							vertix[i].back = 0;
						}
					}
					vertix[i].parent = u;
				}
				else if(vertix[u].distance + map[u][i] == vertix[i].distance){
						if(vertix[i].car>=cmax/2){
							if(vertix[i].send>vertix[u].send){
							vertix[i].send = vertix[u].send;
							vertix[i].back = vertix[i].car - cmax/2 + vertix[u].back;
							vertix[i].parent = u;}
							else if(vertix[i].send == vertix[u].send&&vertix[u].back + vertix[i].car - cmax/2=cmax/2 - vertix[i].car){
								if(vertix[i].send>vertix[u].send){
								vertix[i].back = vertix[u].back - cmax/2 + vertix[i].car;
								vertix[i].send = vertix[u].send;
								vertix[i].parent = u;
								}
								else if(vertix[i].send == vertix[u].send&&vertix[i].back>vertix[u].back - cmax/2 + vertix[i].car){
									vertix[i].back = vertix[u].back - cmax/2 + vertix[i].car;
									vertix[i].send = vertix[u].send;
									vertix[i].parent = u;
								}
							}
							else if(vertix[u].back0){
									vertix[i].send = vertix[u].send + cmax/2 - vertix[i].car - vertix[u].back;
									vertix[i].back = 0;
									vertix[i].parent = u;
								}
							}
						}
				}
			}
	}
}
void PrintRoad(int node){
	if(node == 0)
		printf("0");
	else{
		PrintRoad(vertix[node].parent);
		printf("->%d",node);
	}
}
int main(){
	int m;
	int i;
	freopen("1.in","r",stdin);
	scanf("%d%d%d%d",&cmax,&n,&sp,&m);
	n++;
	for(i = 0;i

你可能感兴趣的:(Pat)