HuGo
duyvan
plain_text
a year ago
2.8 kB
13
Indexable
//HuGO #include<stdio.h> int map[20][20]; int N,M,SR,SC,K,L,E; int mapKc[20][20]; int mapExit[20][20]; int dx[4]={-1,0,1,0}; int dy[4]={0,-1,0,1}; int mapTimeFire[20][20]; int visited[20][20]; int kq; typedef struct{ int x; int y; }Point; Point Q[500]; Point fire[500]; Point lake[500]; Point exit[500]; int t=0,r=0; void push(int x, int y){ Q[t].x=x; Q[t].y=y; t++; } void pop(int *x, int *y){ *x=Q[r].x; *y=Q[r].y; r++; } void chay_lan(){ int i,j; int count=0; r=0,t=0; for(i=1;i<=N;i++){ for(j=1;j<=M;j++){ if(map[i][j] == 1){ push(i,j); mapTimeFire[i][j] = 1; count++; } } } //r=0,t=0; while(t!=r){ Point cur; int k; pop(&cur.x,&cur.y); for(k=0;k<4;k++){ int newX = cur.x + dx[k]; int newY = cur.y + dy[k]; if(newX<1 || newX>N || newY<1 || newY>M)continue; if(mapTimeFire[newX][newY] == 0 && map[newX][newY] ==0){ mapTimeFire[newX][newY] = mapTimeFire[cur.x][cur.y] + 1; push(newX,newY); } } } } void hugo_chay(Point start, int time, int totalKc){ if(mapExit[start.x][start.y]==1){ if(kq<totalKc) kq=totalKc; } int k; for(k=0;k<4;k++){ int newX = start.x + dx[k]; int newY = start.y + dy[k]; if(newX<1 || newX>N || newY<1 || newY>M)continue; if(visited[newX][newY]==0 && time+1<mapTimeFire[newX][newY]){ visited[newX][newY]=1; Point p = {newX,newY}; if(map[newX][newY]==2){ hugo_chay(p,time+2,totalKc+mapKc[newX][newY]); }else{ hugo_chay(p,time+1,totalKc+mapKc[newX][newY]); } visited[newX][newY]=0; } } } void reset(){ int i,j; for(i=1;i<=N;i++){ for(j=1;j<=M;j++){ map[i][j]=0; mapKc[i][j]=0; mapExit[i][j]=0; mapTimeFire[i][j]=0; visited[i][j]=0; } } } int main(){ freopen("input.txt","r",stdin); int tc,T; scanf("%d",&T); for(tc=0;tc<T;tc++){ int i,j; scanf("%d %d %d %d",&N,&M,&SR,&SC); //So luong dam chay scanf("%d",&K); for(i=0;i<K;i++){ scanf("%d %d",&fire[i].x,&fire[i].y); map[fire[i].x][fire[i].y]=1; } //so luong ho nuoc scanf("%d",&L); for(i=0;i<L;i++){ scanf("%d %d",&lake[i].x,&lake[i].y); map[lake[i].x][lake[i].y]=2; } //so luong loi thoat scanf("%d",&E); for(i=0;i<E;i++){ scanf("%d %d",&exit[i].x,&exit[i].y); mapExit[exit[i].x][exit[i].y]=1; } //kc for(i=1;i<=N;i++){ for(j=1;j<=M;j++){ visited[i][j]=0; scanf("%d",&mapKc[i][j]); } } chay_lan(); for(i=1;i<=N;i++){ for(j=1;j<=M;j++){ if(mapTimeFire[i][j]==0){ mapTimeFire[i][j]=99; } } } kq=-1; visited[SR][SC]=1; Point start = {SR,SC}; hugo_chay(start,1,mapKc[SR][SC]); printf("Case #%d\n%d\n",tc+1,kq); reset(); } return 0; }
Editor is loading...
Leave a Comment