1.给定n*m地图,A,B,C,D分别为不同受瘟疫影响程度,X代表不受瘟疫影响,然后再给出I个坐标,表示该点瘟疫程度加重,当瘟疫程度为D时加重,将会向四周扩散,当四周瘟疫程度也为D时,将进行连锁反应,但每个连锁反应的D只能扩散一次,输出最后的地图。
思路1:DFS
void dfs(int x,int y)
{
int x1,y1,i,j;
if(maze[x][y]=='X')return;//如果当前不可侵入则退出
if(maze[x][y]=='D')//如果为D则扩散
{
if(mark[x][y]==flag)return;//如果扩散过一次则退出
mark[x][y]=flag;
for(i=0;i<4;i++)//向四周深搜
{
x1=x+dir[i][0];
y1=y+dir[i][1];
if(x1>=0&&x1<n&&y1>=0&&y1<m) {
dfs(x1,y1);
}
}
}
else maze[x][y]++;//不是D就加重程度
}
思路2:BFS
与DFS差不多,就是将扩散的点加入队列。
2.给定14个数字(都是1到9),判断是否是4组3个元素递增或者相同和1组2个元素相同,跟麻将类似,比如说(1,2,3)(4,5,6)(7.,8,9)(7,7,7)(9,9)。
思路:DFS,预处理统计1到9每个数字的个数,然后遍历,找出个数大于2的进行深搜,当找到以上符合条件的+1,直到加到4退出。