HDU1241多种解

来源:互联网 发布:万国数据是外企吗 编辑:程序博客网 时间:2024/06/04 00:23
#include<stdio.h>#include<string.h>int m,n,a[2][10000];char grid[100][100];void bfs(int i,int j){    int k=0,t=0;    memset(a,-1,sizeof(a));    a[0][k]=i;    a[1][k]=j;    while(a[0][t]!=-1)    {        i=a[0][t];        j=a[1][t];        for(int c=-1;c<=1;c++)        {            for(int b=-1;b<=1;b++)            {                if(grid[i+c][j+b]=='@'&&i+c>=0&&i+c<n&&j+b>=0&&j+b<m)                {                    k++;                    a[0][k]=i+c;                    a[1][k]=j+b;                    grid[i+c][j+b]='*';                }            }        }        t++;    }}int main(){    int i,j,cnt;    while(scanf("%d%d",&n,&m)!=EOF&&(n!=0||m!=0))    {         for(i=0;i<n;i++)         {             scanf("%s",grid[i]);         }         for(cnt=i=0;i<n;i++)         {             for(j=0;j<m;j++)             {                 if(grid[i][j]=='@')                 {                     grid[i][j]='*';                     bfs(i,j);                     cnt++;                 }             }         }         printf("%d\n",cnt);    }}
#include<cstdio>#include<iostream>using namespace std;#include<queue>char grid[100][100];int m,n;struct ground{    int a,b;}t;void bfs(int i,int j){    queue<ground> q;    t.a=i;t.b=j;    q.push(t);    grid[i][j]='*';    while(!q.empty())    {        t=q.front();        q.pop();        i=t.a;j=t.b;        int ii,jj;        for(int a=-1;a<=1;a++)        {            for(int b=-1;b<=1;b++)            {                ii=i;jj=j;                if(grid[ii+a][jj+b]=='@'&&ii+a>=0&&ii+a<n&&jj+b>=0&&jj+b<m)                {                    t.a=ii+a;t.b=jj+b;                    q.push(t);                    grid[ii+a][jj+b]='*';                }            }        }    }}int main(){    int i,j,cnt;    while(scanf("%d%d",&n,&m)!=EOF&&(n!=0||m!=0))    {        for(i=0;i<n;i++)        {            scanf("%s",grid[i]);        }        for(cnt=i=0;i<n;i++)        {            for(j=0;j<m;j++)            {                if(grid[i][j]=='@')                {                    bfs(i,j);                    grid[i][j]='*';                    cnt++;                }            }        }        printf("%d\n",cnt);    }}
#include<stdio.h>#include<string.h>char grid[100][100];int m,n,idx[100][100];void dfs(int i,int j,int id){    if(i<0||i>=m||j<0||j>=n)        return;    if(grid[i][j]!='@'||idx[i][j]!=0)        return;    idx[i][j]=id;    for(int dr=-1;dr<=1;dr++)    {        for(int ds=-1;ds<=1;ds++)        {            if(dr!=0||ds!=0)                dfs(i+dr,j+ds,id);        }    }}int main(){    int i,j,cnt;    while(scanf("%d%d",&m,&n)&&m!=0)    {        for(i=0;i<m;i++)        {            scanf("%s",grid[i]);        }        memset(idx,0,sizeof(idx));        for(cnt=i=0;i<m;i++)        {            for(j=0;j<n;j++)            {                if(grid[i][j]=='@'&&idx[i][j]==0)                    dfs(i,j,++cnt);            }        }        printf("%d\n",cnt);    }    return 0;}

#include<stdio.h>char grid[100][100];int n,m;void dfs(int i,int j){    grid[i][j]='*';    for(;;)    {        if(i+1<m)        {            if(grid[i+1][j]=='@')            {                dfs(i+1,j);            }            if(j+1<n&&grid[i+1][j+1]=='@')            {                dfs(i+1,j+1);            }            if(j-1>=0&&grid[i+1][j-1]=='@')            {                dfs(i+1,j-1);            }        }        if(j-1>=0&&grid[i][j-1]=='@')            dfs(i,j-1);        if(j+1<n&&grid[i][j+1]=='@')            dfs(i,j+1);        if(i-1>=0)        {            if(grid[i-1][j]=='@')            {                dfs(i-1,j);            }            if(j+1<n&&grid[i-1][j+1]=='@')            {                dfs(i-1,j+1);            }            if(j-1>=0&&grid[i-1][j-1]=='@')            {                dfs(i-1,j-1);            }        }        break;    }}int main(){    int i,j,t;    while(scanf("%d%d",&m,&n)!=EOF&&m!=0)    {        for(i=0;i<m;i++)        {            scanf("%s",grid[i]);        }        for(t=i=0;i<m;i++)        {            for(j=0;j<n;j++)            {                if(grid[i][j]=='@')                {                    dfs(i,j);                    t++;                }            }        }        printf("%d\n",t);    }}#include<stdio.h>#include<string.h>int m,n,a[2][10000];char grid[101][100];void bfs(int i,int j){    int k=0,t=0;    memset(a,0,sizeof(a));    a[0][k]=i;    a[1][k]=j;    while(a[0][t]!=0)    {        i=a[0][t];        j=a[1][t];        for(int c=-1;c<=1;c++)        {            for(int b=-1;b<=1;b++)            {                if(grid[i+c][j+b]=='@'&&i+c>=1&&i+c<=n&&j+b>=0&&j+b<m)                {                    k++;                    a[0][k]=i+c;                    a[1][k]=j+b;                    grid[i+c][j+b]='*';                }            }        }        t++;    }}int main(){    int i,j,cnt;    while(scanf("%d%d",&n,&m)!=EOF&&(n!=0||m!=0))    {         for(i=1;i<=n;i++)         {             scanf("%s",grid[i]);         }         for(cnt=0,i=1;i<=n;i++)         {             for(j=0;j<m;j++)             {                 if(grid[i][j]=='@')                 {                     grid[i][j]='*';                     bfs(i,j);                     cnt++;                 }             }         }         printf("%d\n",cnt);    }}
#include<stdio.h>  int m,n,t = 0,ft[105][105],dp[105][105],q[101*101*20][2];char a[105][105];int dir[4][2]= {{0,-1},{0,1},{1,0},{-1,0}};void bfs(){int x,y,xx,yy,parent,front = 0,rear = 1,tt,i;q[0][0] = q[0][1] = 0; dp[0][0] = 0;while(front != rear){x = q[front][0]; y = q[front][1];parent = front; front++;for(i = 0; i < 4; i++){xx = x + dir[i][0]; yy = y + dir[i][1];if(xx < 0 || xx >= n || yy < 0 || yy >= m) continue;if(a[xx][yy] == 'X') continue;tt = dp[x][y] + 1;if(a[xx][yy] != '.') tt += a[xx][yy] - '0';if(dp[xx][yy] != -1 && dp[xx][yy] <= tt) continue;//此处需注意,一旦 <=  变成 < 就会爆时间dp[xx][yy] = tt;ft[xx][yy] = parent;q[rear][0] = xx; q[rear][1] = yy;rear++;}}}void show(int x,int y){int i,_=ft[x][y];if(ft[x][y] == -1) return;show(q[_][0],q[_][1]);t++;printf("%ds:(%d,%d)->(%d,%d)\n",t,q[_][0],q[_][1],x,y);if(a[x][y] != '.'){for(i = 0; i < a[x][y] - '0'; i++){printf("%ds:FIGHT AT (%d,%d)\n",++t,x,y);}}}int main(){int i,j;while(~scanf("%d%d",&n,&m)){t = 0;getchar();memset(ft,-1,sizeof(ft));memset(dp,-1,sizeof(dp));for(i = 0; i < n; i++){gets(a[i]);}bfs();if(dp[n - 1][m - 1] == -1) printf("God please help our poor hero.\nFINISH\n");else{printf("It takes %d seconds to reach the target position, let me show you the way.\n",dp[n - 1][m - 1]);show(n - 1, m - 1);printf("FINISH\n");}}return 0;}

  • #include<iostream>  
  • using namespace std;  
  • #include<queue>  
  • char map[110][110];  
  • int d[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};  
  • struct point  
  • {  
  •     int a,b;  
  • }t;  
  •   
  • void bfs(int i,int j)  
  • {  
  •     int k;  
  •     queue<point> q;  
  •     t.a=i,t.b=j;  
  •     q.push(t);  
  •     map[i][j]='*';  
  •     while(!q.empty())  
  •     {  
  •         t=q.front();  
  •         q.pop();  
  •         i=t.a,j=t.b;  
  •         for(k=0;k<8;k++)  
  •         {  
  •             int ii=i+d[k][0],jj=j+d[k][1];  
  •             t.a=ii,t.b=jj;  
  •             if(map[ii][jj]=='@')  
  •             {  
  •                 q.push(t);  
  •                 map[ii][jj]='*';  
  •             }  
  •         }  
  •     }  
  • }  
  •   
  • int main()  
  • {  
  •     freopen("a.txt","r",stdin);  
  •     int n,m;  
  •     while(scanf("%d%d",&n,&m)&&(n+m))  
  •     {  
  •         memset(map,0,sizeof(map));  
  •         int i,j;  
  •         int cnt=0;  
  •         for(i=1;i<=n;i++)  
  •             //for(j=1;j<=m;j++)  
  •                 scanf("%s",map[i]+1);  
  •                 //或者cin>>map[i][j];  
  •             for(i=1;i<=n;i++)  
  •                 for(j=1;j<=m;j++)  
  •                     if(map[i][j]=='@')  
  •                 {  
  •                     bfs(i,j);  
  •                     cnt++;  
  •                 }  
  •                 printf("%d/n",cnt);  
  •     }  
  •     return 0;  
  • 这几种解法以后多看看,多体会一下
    0 0
    原创粉丝点击