#include <iostream> int MAX=2002; using namespace std; int main() { int n,m,k; int s=0; int **tab; int f,i,j,x; char c; tab = new int*[MAX]; for(i = 0; i < MAX; ++i) tab[i] = new int[MAX]; scanf("%d%d%d",&n,&m,&k); for(i=0;i<MAX;i++) for(j=0;j<=MAX;j++) tab[i][j]=1000000; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { scanf(" %c",&c); if(c=='.') tab[i][j]=10000; } tab[1][1]=0; do{ f=0; for(i=1;i<=n+1;i++) for(j=1;j<=m+1;j++) { if(tab[i][j]==1000000) continue; x=tab[i-1][j]+1; if(x<tab[i][j]) { tab[i][j]=x; f=1; } x=tab[i+1][j]+1; if(x<tab[i][j]) { tab[i][j]=x; f=1; } x=tab[i][j-1]+1; if(x<tab[i][j]) { tab[i][j]=x; f=1; } x=tab[i][j+1]+1; if(x<tab[i][j]) { tab[i][j]=x; f=1; } } }while(f==1); s=tab[n][m]; x=1000000; f=0; int a,b; for(i=0;i<k;i++) { scanf("%d%d",&a,&b); j=a*s+b*(s+2-n-m); if (j==x)f++; if(j<x) {x=j;f=1;} } printf("%d %d\n",x,f); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <iostream> int MAX=2002; using namespace std; int main() { int n,m,k; int s=0; int **tab; int f,i,j,x; char c; tab = new int*[MAX]; for(i = 0; i < MAX; ++i) tab[i] = new int[MAX]; scanf("%d%d%d",&n,&m,&k); for(i=0;i<MAX;i++) for(j=0;j<=MAX;j++) tab[i][j]=1000000; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { scanf(" %c",&c); if(c=='.') tab[i][j]=10000; } tab[1][1]=0; do{ f=0; for(i=1;i<=n+1;i++) for(j=1;j<=m+1;j++) { if(tab[i][j]==1000000) continue; x=tab[i-1][j]+1; if(x<tab[i][j]) { tab[i][j]=x; f=1; } x=tab[i+1][j]+1; if(x<tab[i][j]) { tab[i][j]=x; f=1; } x=tab[i][j-1]+1; if(x<tab[i][j]) { tab[i][j]=x; f=1; } x=tab[i][j+1]+1; if(x<tab[i][j]) { tab[i][j]=x; f=1; } } }while(f==1); s=tab[n][m]; x=1000000; f=0; int a,b; for(i=0;i<k;i++) { scanf("%d%d",&a,&b); j=a*s+b*(s+2-n-m); if (j==x)f++; if(j<x) {x=j;f=1;} } printf("%d %d\n",x,f); return 0; } |