本文主要是介绍杭电 1045题 Fire Net,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接~~>
简单深度搜索,第一次做一次AC,第二次换了一种方法就找不出错误了!
search(x,y+1,t+1); s[x][y+1]='.';后面应该还有一个search(x,y+1,t);的调用;
代码(1):
#include<stdio.h>
int n,max=0;
char s[5][5];
void dfs(int x,int y,int q)
{void search(int x,int y,int q);int i,j;int f=0;for(i=x+1;i<n;i++)if(s[i][y]=='X')break;else if(s[i][y]=='Q'){f=1;break;}for(j=y+1;j<n;j++)if(s[x][j]=='X')break;else if(s[x][j]=='Q'){f=1;break;}for(i=x-1;i>=0;i--)if(s[i][y]=='X')break;else if(s[i][y]=='Q'){f=1;break;}for(j=y-1;j>=0;j--)if(s[x][j]=='X')break;else if(s[x][j]=='Q'){f=1;break;}if(f==0){s[x][y]='Q';q++;f=0;}if(q>max)max=q;search(x,y,q);s[x][y]='.';
}
void search(int x,int y,int q)
{int i,j;if(y==n-1){x=x+1;y=-1;}for(i=x;i<n;i++){ if(i!=x)y=-1;for(j=y+1;j<n;j++)if(s[i][j]=='.'){dfs(i,j,q);}}
}
int main()
{int i,j;while(scanf("%d",&n)!=EOF){max=0;if(n==0)break;for(i=0;i<n;i++)scanf("%s",s[i]);for(i=0;i<n;i++)for(j=0;j<n;j++)if(s[i][j]=='.'){dfs(i,j,0);}printf("%d\n",max);}return 0;
}
代码(2):
#include<stdio.h>
char s[5][5];
int max,n;
void search(int x,int y,int t)
{int i,flag=0;if(t>max)max=t;if(y==n){x++;y=0;}if(x==n)return ;if(s[x][y]=='X')flag=1;for(i=x+1;i<n;i++)if(s[i][y]=='A'){flag=1;break;}else if(s[i][y]=='X')break;for(i=x-1;i>=0;i--)if(s[i][y]=='A'){flag=1;break;}else if(s[i][y]=='X')break;for(i=y-1;i>=0;i--)if(s[x][i]=='A'){flag=1;break;}else if(s[x][i]=='X')break;for(i=y+1;i<n;i++)if(s[x][i]=='A'){flag=1;break;}else if(s[x][i]=='X')break;if(flag==0){s[x][y]='A';// printf("%d\n",t+1);search(x,y+1,t+1);s[x][y]='.';search(x,y+1,t);}elsesearch(x,y+1,t);
}
int main()
{int i,j;while(scanf("%d",&n)!=EOF){if(n==0)break;max=0;for(i=0;i<n;i++)scanf("%s",s[i]);for(i=0;i<n;i++)for(j=0;j<n;j++)if(s[i][j]=='.'){search(i,j,0);}printf("%d\n",max);}return 0;
}
优代码链接~>
这篇关于杭电 1045题 Fire Net的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!