⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 image.cpp

📁 设计一个算法
💻 CPP
字号:

#include <iostream.h>
#include <fstream.h>
ifstream in("input.txt");
ofstream out("output.txt");
class position;
template <class T>  class queue;
class position
{public:
	int row,col;};
template <class T>
class node{
	friend queue<T>;
	private:
		T data;
		node<T> *next;
};
template <class T>
class queue
{public:
queue(){front=rear=0;}
~queue();
bool empty() const
{return((front)?false:true);}
T first() const;
T last() const;
queue<T>&enqueue(const T&x);
queue<T>&dequeue(T&x);
private:
	node<T> *front;
	node<T> *rear;
};
template <class T>
queue<T>::~queue()
{node<T> *next;
while(front){
	next=front->next;
	delete front;
	front=next;
}
}
template <class T>
T queue<T>::first() const
{
	if(empty()) throw OutOfBounds();
	return front->data;
}
template <class T>
T queue<T>::last() const
{
	if(empty()) throw OutOfBounds();
	return rear->data;
}
template <class T>
queue<T>&queue<T>::enqueue(const T&x)
{node<T> *p=new node<T>;
p->data=x;
p->next=0;
if(front) rear->next=p;
else front=p;
rear=p;
return *this;
}
template <class T>
queue<T> &queue<T>::dequeue(T&x)
{
	x=front->data;
	node<T> *p=front;
	front=front->next;
	delete p;
	return *this;
}
int main()
{
	int m,i,j;
	int **p;
	in>>m;
	p=new int*[m+2];
	for(i=0;i<m+2;i++)
	{
		p[i]=new int[m+2];
	}	
	for(i=0;i<=m+1;i++)
	{
		p[i][0]=p[i][m+1]=2;
	}
	for(i=0;i<=m+1;i++)
	{
		p[0][i]=p[m+1][i]=2;
	}
	for(i=1;i<m+1;i++)
		for(j=1;j<m+1;j++)
		{
			in>>p[i][j];
		}
	position offset[4];
	position here,nbr;
	offset[0].row=0;offset[0].col=1;
	offset[1].row=1;offset[1].col=0;
	offset[2].row=0;offset[2].col=-1;
	offset[3].row=-1;offset[3].col=0;
	int num=4,n=0;
	queue <position> q;
	for(i=1;i<=m;i++)
		for(j=1;j<=m;j++)
		{
			if(p[i][j]==1)
			{
				p[i][j]=2;
				here.row=i;
				here.col=j;
				do{
					for(int t=0;t<num;t++)
					{
						nbr.row=here.row+offset[t].row;
			            nbr.col=here.col+offset[t].col;
			            if(p[nbr.row][nbr.col]==1)
						{
							p[nbr.row][nbr.col]=2;
							q.enqueue(nbr);
						}
					}
					if(q.empty()) break;
					q.dequeue(here);
				}while(true);
				n++;
			}
		}
	out<<n<<endl;
	return 0;
}



	













⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -